-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathChangeLog
More file actions
3825 lines (2617 loc) · 129 KB
/
Copy pathChangeLog
File metadata and controls
3825 lines (2617 loc) · 129 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
2026-05-25 Bill Six <billsix@gmail.com>
Examples: native assembly listings + runnable executables via
a Makefile, in the Docker build.
Each C demo now builds along the full /pgu-style flow
<demo>.c -> <demo>.s -> bin/<demo>: a clean, readable native
assembly listing beside its <demo>.c / hand-written <demo>.asm
(read all three vocabularies in one directory), and that same
.s assembled + linked into a runnable native executable.
Native = the build host's arch (x86_64, AArch64, ...): `cc`
with no --target follows the host. The MIPS side (the
hand-written .asm run under spim + its golden tests) is owned
by meson and unchanged.
* examples/src/Makefile: new. Derives demos vs. helpers from
the tree (top-level *.c + the two lib sources are helpers;
every other *.c is a demo with its own _start). %.s: %.c
emits the listing with the educational flag set (-O0,
-fomit-frame-pointer, -fno-asynchronous-unwind-tables,
-fno-unwind-tables, -fno-stack-protector, -fverbose-asm);
%.o: %.s assembles it; bin/<demo> links the demo's .s with
-nostdlib against helper archives libio.a/libstdlib.a/
libctype.a (archive semantics pull only the members each demo
references, so no per-demo dep lists). Targets: all,
listings, executables, clean. CC overridable.
* examples/src/meson.build (edu_args): dropped -save-temps=obj
and -fverbose-asm. Listing generation moved to the Makefile,
which produces cleaner output (no -g/.cfi_ noise) at a sane
path; the meson build no longer emits the buried
builddir/.../<demo>.p/<munged>.c.s. Supersedes the approach
in tasks/archive/PLAN-asm-listings.md.
* Dockerfile: add `make` to the dnf install list; run
`make -C examples/src CC=clang all` after the meson
build/test so listings + executables ship in the image.
* examples/.gitignore: ignore *.s, *.o, *.a, and src/bin/
(build artifacts; hand-written sources are all *.asm).
* examples/READING-ORDER.md: rewrote the "Comparing the C
compiler's translation" section to point at the beside-source
<demo>.s and the runnable bin/<demo>, with how to regenerate.
* examples/tasks/PLAN-asm-listings-makefile.md: new plan doc.
2026-05-23 Bill Six <billsix@gmail.com>
Teaching mode: base+offset coverage and display polish.
* tests/tt.explain.s: new multi-slot stack-frame save/restore
block (sw $a0/$a1/$a2/$ra at $sp+4/+8/+12/+16, then matching
loads) and a negative-offset locals block (sw/lw at -4($fp)
and -8($fp)). Closes the offset-diversity gap — previously
only zero and offset=4 were exercised.
* src/display-utils.c: int_reg_names[30] renamed from "s8" to
"fp". The disassembler now consistently shows $fp when the
source uses register 30 as a frame pointer. The scanner
already accepted both "fp" and "s8" as input, so this is a
display-only change.
* src/explain.c (tpl_load, tpl_store): effective-address line
prints "$rs - N" instead of "$rs + -N" for negative
immediates. Example: a `lw $t3, -4($fp)` now reads
"Effective address = $fp - 4 = 0x7fffffdc - 4 = 0x7fffffd8."
Teaching mode: narration for the rest of MIPS's base+offset
load/store families.
* src/explain.c: six new templates and a shared
`say_effective_address()` helper. Wired into the opcode
switch for 10 previously-undocumented opcodes:
- lwl, lwr, swl, swr (unaligned word access)
- ll, sc (atomic primitives — narration explains the real
multiprocessor semantics spim doesn't model)
- lwc1, ldc1, swc1, sdc1 (coprocessor-1 FP loads/stores)
Pre-refactor of tpl_load/tpl_store is byte-identical
(verified with zero-diff before new templates landed).
* tests/tt.explain.s: added an 8-byte-aligned data buffer
`ubuf` and four test blocks (one per family above)
exercising every new opcode.
* tests/tt.explain.expected: regenerated. Output grew from
3940 to 4534 lines; zero `(no detailed explanation)`
fallthroughs remain in the tt.explain.s run.
CLI: support multiple `-f` files on the command line.
* src/spim.c: `-f` can now be specified repeatedly; each file
accumulates into one symbol table the same way the REPL's
`load` command does (forward references resolve across
files). Hoisted `initialize_world` out of the per-file
branch with a lazy-init guard; replaced `break` with
`continue` for explicit `-f`; positional bare-arg shortcut
retained as a one-shot for backwards compat. Post-loop
fixup sets `program_argc/argv` from the last loaded file
when no positional program args follow the `-f` files.
* tests/tt.multifile.s, tests/tt.multifile.helper.s: new
regression — two-file program tested in both load orders to
confirm cross-file forward references resolve.
* tests/run-test.sh, meson.build: new `multifile` test
registered (test count: 22 → 23).
* Documentation/spim.1, src/spim.c (usage string): document
the multi-`-file`/multi-`-f` syntax and the
symbol-table-accumulation semantics.
Repo merge: absorb the standalone /examples curriculum into
examples/ subdirectory.
Goal was one Dockerfile, one `meson test`, and goldens
enforced at container-build time (any drift between the C
side and the spim-asm side of a paired demo fails the build).
Full task writeup in tasks/merge-examples-into-spimulator.md.
* examples/: 27 commits from the standalone repo replayed
with original author/email/date/message preserved (via
GIT_AUTHOR_* + GIT_COMMITTER_* env vars and `git archive`
for each commit's tree). `git log examples/` shows the
full history. Pruned: book/, Dockerfile, Makefile,
entrypoint/, output/, musl/ — none needed in the merged
tree.
* meson.build: `subdir('examples/src')` at the bottom. The
inner meson.build dropped its own `project(...)` and
scoped its compile/link flags per-target (so -nostdlib
doesn't leak into spim's own build, which needs libc +
libedit). 6 demo tests registered in the 'examples' meson
suite (ctype-demo, atoi-demo, abs-demo, exit-demo,
bsearch-demo, atexit-demo). Test count: 23 → 29.
* examples/tests/run-demo.sh: per-demo runner that validates
BOTH the C binary AND the spim-asm version against the
same .expected golden, plus .expected-status where pinned.
Fails fast on any mismatch.
* Dockerfile: added `diffutils` to dnf install (run-demo.sh
uses `diff -q`); added `COPY examples/`; the existing
`RUN meson test` step now covers both suites, so any
drift fails the image build.
* tasks/README.md (new): two-surface index — tasks/ for
spim-internal, examples/tasks/ for curriculum.
* Path-reference sweep: ~40 stale /examples/ prose
references → examples/; 4 broken ../spimulator/ relative
markdown links fixed; LICENSE-musl files lost their stale
"Local copy /examples/musl/" lines.
2026-05-20 Bill Six <billsix@gmail.com>
Post-Phase-5 naming cleanup (four tiers):
* Tier 3: stale `bison` / `parser.y` / `scanner.l` / `Phase N`
/ `coexist` comment references swept from src/hp_*.c and
include/hp_*.h.
* Tier 2a: `hp_` prefix dropped throughout (~370 occurrences).
Source files renamed: hp_scanner.c → scanner.c, hp_parser.c
→ parser.c, hp_pseudo_op.c → pseudo_op.c. Header
hp_parser.h merged into parser.h; hp_pseudo_op.h renamed
to pseudo_op.h. Three duplicate-symbol merges
(hp_imm_op_to_op + imm_op_to_op, hp_initialize_parser +
initialize_parser wrapper, hp_erroneous_line +
erroneous_line wrapper).
* Tier 2b: flex/bison-era REPL names renamed. yylex /
yyparse wrappers deleted; spim.c's read_token() and
ASM_CMD case call scanner_advance() / parse_file()
directly. yyerror → parse_error, yywarn → parse_warn,
push_scanner / pop_scanner → scanner_push_source /
scanner_pop_source, initialize_scanner / initialize_parser
→ scanner_init / parser_init. Dead #define YYSTYPE
macro removed from scanner.h.
* Tier 2c: 390 Y_* tokens renamed to TOK_* (Y_ADD_OP →
TOK_ADD_OP, Y_EOF → TOK_EOF, etc.). yylval → scan_value,
yylval_t → scan_value_t. 1430 total substitutions across
11 files.
* Tier 2d: dead only_id shim deleted from scanner.h /
scanner.c.
Each tier passed the verification gate independently. The
following 2026-05-19 entry describes the original Phase-5
work; its references to Y_* tokens and yyerror are
historically accurate but those names are now TOK_* and
parse_error respectively.
2026-05-19 Bill Six <billsix@gmail.com>
* src/scanner.l, src/parser.y: deleted (Phase 5).
* include/tokens.h: new, replaces the bison-generated
parser_yacc.h; defines all Y_* tokens via op.h's X-macro
pattern plus 8 explicit structural tokens (Y_EOF, Y_NL,
Y_INT, Y_ID, Y_REG, Y_FP_REG, Y_STR, Y_FP).
* include/parser.h: trimmed to the surface the runtime still
needs (yyerror, imm_op_to_op, fix_current_label_address,
data_dir/text_dir/parse_error* globals). initialize_parser
and yyparse went away with bison.
* include/scanner.h: dropped flex-only yylex / push_scanner /
pop_scanner declarations; the surviving runtime-facing
helpers (initialize_scanner, scanner_start_line,
erroneous_line, source_line, register_name_to_number) are
now satisfied by src/hp_scanner.c.
* src/hp_scanner.c: relocate the runtime globals (line_no,
yylval, only_id) and the register_tbl + register_name_to_
number lookup that lived in scanner.l. Add flex-name
compatibility wrappers (yylex returning 0 for Y_EOF;
push_scanner / pop_scanner with an 8-deep snapshot stack;
initialize_scanner / initialize_parser shims) so spim.c's
REPL command tokenizer keeps working unchanged. Add
erroneous_line / source_line / scanner_start_line public
aliases for the existing hp_* internals.
* src/hp_parser.c: relocate data_dir / text_dir definitions.
Promote hp_fix_line_labels to fix_current_label_address
(public), so data.c / inst.c's natural alignment-fix-up
flow operates on the hand parser's label state directly.
Add a yyparse() shim that calls hp_parse_file() for the
REPL's ASM_CMD path. Expose hp_input_file_name via
hp_input_file_name_get / hp_set_input_file_name so
hp_pseudo_op.c's yyerror funnel can format messages.
* src/hp_pseudo_op.c: take ownership of parse_error_occurred
/ parse_errors_seen / yyerror / yywarn / imm_op_to_op
(canonical-named definitions, used by runtime call sites
in sym-tbl.c and inst.c).
* src/spim.c: strip the `-parser=` flag, parser_kind enum,
and the help-text lines describing them. Add forward
externs for the hand-parser-supplied yylex / yyparse /
push_scanner / pop_scanner / initialize_scanner /
initialize_parser names that the REPL command tokenizer
still calls.
* src/spim-utils.c: drop use_hand_parser / saved_use_hand
branching from read_assembly_file and the exception-file
loader. The hand parser is the sole parser. Exception
handler (src/exceptions.s) is loaded through the same
hp_initialize_parser + hp_parse_file path as user code.
* meson.build: drop the flex / bison `find_program` calls
and the two `custom_target` rules that generated
lex.yy.c and parser_yacc.{c,h}.
* Dockerfile: drop `flex` and `bison` from the `dnf install`
list.
* tests/parity-harness.sh: deleted — there is no second
parser to compare against any more.
Phase 5 of the hand-written-parser migration: bison and
flex removed. Spim is now a pure-C build with no parser
generator dependencies. The hand-written recursive-descent
parser is the only path.
Two pre-Phase-5 hand-parser gaps fixed because exceptions.s
tripped both:
- hp_sync_to_nl() was over-consuming the trailing newline,
leaving parse_line's outer newline check to mis-fire
"Extra tokens after instruction" on whatever followed
an ignored directive like `.set noat`. Now stops AT
the newline; parse_line consumes it.
- parse_i2() rejected the 2-operand shorthand for
BINARY_LOGICALI_OPS — `ori $k0, 0x1` (= ori $k0, $k0,
0x1). Mirrors parser.y:991-994. Used heavily by
exception handlers.
Tested:
- Dockerfile smoke set (bare/core/le/argv/args-cmd/
read_int_eof) passes.
- tt.dir, tt.octal_escape, tt.return_value (exit 42),
tt.unaligned (exit 132 = 128+4), tt.stderr_split (ok on
stdout), tt.missing_main (exit 1), tt.parse_error (exit
2) all behave as expected.
- /examples curriculum spot-checks (01-helloworld,
06-fizzbuzz, 18-cksum, 19-echo, 20-factorial,
22-binary-search) produce identical output to the
bison-era baseline.
2026-05-19 Bill Six <billsix@gmail.com>
* include/hp_parser.h, include/hp_pseudo_op.h:
* src/hp_scanner.c, src/hp_parser.c, src/hp_pseudo_op.c:
* src/spim.c (parser_kind, main): default-flipped flag parser
* src/spim-utils.c (read_assembly_file, use_hand_parser):
* tests/parity-harness.sh:
* tasks/handwritten-parser-migration.md,
tasks/scanner-parser-inventory.md,
tasks/handwritten-parser-design.md:
Phases 0-4 of the hand-written-parser migration land. flex
+ bison continue to coexist behind `-parser=bison`; the
hand-written recursive-descent parser becomes the default.
The hand parser covers every construct used by the
/examples curriculum (44 / 44 demos parity-clean, byte-
identical assembled output against bison). 10 / 19
spim regression tests in tests/tt.*.s also pass; the
remaining 9 use FP / coproc / TLB / unaligned-load
constructs not yet ported (filed for future Phase 3
cleanup; users fall back with `-parser=bison`).
Bugs found and fixed during the migration:
- Branch operand order (i_type_inst_free takes rt/rs not
rs/rt; SRC2 is the rt slot).
- Cached-lookahead violation of bison's only_id global —
the per-token flag leaked past the token it was
intended to affect. Replaced with a self-clearing
hp_scanner_force_identifier() that recognizes the
cached state.
- PC-relative branch displacement: parser.y's LABEL
production sets pc_relative=true on the imm_expr
(overlooked because no grep showed it); without this,
branches encode as absolute offsets and resolve_a_label
silently does the wrong thing.
- Label fix-up across line boundaries: bison's CMD: TERM
production does NOT clear_labels, so a bare `crctab:`
line leaves this_line_labels non-empty for the next
line's directive to retroactively align via
fix_current_label_address. Reproduced in
hp_this_line_labels.
- data.c's enable_data_auto_alignment static is
unreadable from outside; tracked our own hp_auto_align
mirror so `.align 0` correctly disables subsequent
auto-alignment.
Phase 5 (drop bison entirely) is deferred; bison remains in
the build as the fallback parser. See
tasks/handwritten-parser-migration.md for the full status.
2026-05-19 Bill Six <billsix@gmail.com>
* src/spim.c (main):
* src/exceptions.s (__start):
* src/parser.y (yyerror):
* src/run.c (raise_exception):
* src/spim-utils.c (read_assembly_file):
* include/parser.h, include/inst.h:
* tests/tt.stderr_split.s, tt.return_value.s,
tt.parse_error.s, tt.missing_main.s, tt.unaligned.s:
* tasks/unix-process-conformance.md:
Make `spimulator -f foo.asm` behave as a regular Unix
process so it can be used in pipelines, with `$?`, and in
CI/Makefiles. Four distinct fixes:
(1) message_out now defaults to stderr, not stdout. The
"Loaded: …" banner and "The following symbols are
undefined" notice no longer pollute the data stream.
(2) __start now passes main's $v0 through as the exit
status (via syscall 17 instead of syscall 10), so
`return N` from main becomes shell `$?`.
(3) Parser errors, missing files, and undefined symbols
set a non-zero exit code (2, 2, and 1 respectively)
via a new `parse_errors_seen` counter. spim no longer
drops into the REPL when -file was supplied but the
file couldn't be loaded.
(4) Runtime exceptions (alignment fault, address error,
arithmetic overflow, etc.) now lift into a shell-
visible non-zero exit code: 128 + ExcCode, mirroring
the shell's 128 + signum convention for signal-
killed processes. A new `first_bad_exception` latch
in raise_exception() records the first non-syscall,
non-breakpoint, non-interrupt exception. Explicit
exit2(N != 0) takes precedence.
Motivation: support a possible rewrite of "Programming from
the Ground Up" targeting MIPS-on-spim. PGU's first chapter
teaches `$?` inspection; that arc only works if spim is a
well-behaved process.
Consequence to be addressed in a follow-up: /examples demos
that `jr $ra` from main without first setting $v0 = 0 now
inherit whatever value happened to be in $v0 (typically the
syscall number of the last operation). Several demos exit
non-zero as a result. Right behavior, curriculum sweep
pending.
* src/scanner.l (copy_str):
Fix octal-escape decoding in .asciiz strings. The high
octal digit was shifted by 3 bits instead of 6, so a
three-digit octal escape `\abc` decoded to (a+b)*8+c
rather than a*64+b*8+c. In particular `\134` (intended
backslash, 0x5C) produced 0x24 ('$') instead.
The bug was inert until /examples/src/35-od (od -c demo)
tried to print a literal backslash; copy_str does not
support `\\` either, so `\134` was the only path
available, and it was silently wrong.
* tests/tt.octal_escape.s:
New regression test. Decodes `\134`, `\044`, `\120` and
verifies the resulting bytes are 0x5C, 0x24, 0x50.
* tasks/octal-escape-fix.md:
Bug writeup, with the diff-level explanation, the
surfacing context, and a note that `scan_escape` (for
`'\X'` char literals) still does not support octal at
all — left untouched because no demo needs it.
2023-08-04 James Larus <larus@Jim-Macbook-Max.local>
* Release: 9.1.24
2023-08-01 James Larus <larus@Jim-Macbook-Max.local>
* main.cpp:
Missing include.
* spim-utils.cpp README:
Update notice.
2022-11-08 James Larus <larus@Jim-Macbook-Max.local>
* mem.c (bad_mem_write)
[https://sourceforge.net/p/spimsimulator/patches/7/]:
null memory ref when writing to text location not containing instruction.
2022-05-11 James Larus <larus@icdhcp-1-244.epfl.ch>
* spim/spim.cpp (main) [https://sourceforge.net/p/spimsimulator/bugs/104/]:
spim did not properly parse command line arguments to assembly program.
2022-03-15 James Larus <larus@Jim-Macbook-Max.local>
* QtSpim/main.cpp [https://sourceforge.net/p/spimsimulator/bugs/103/]:
Fix incorrect LOCALE on Linux.
2022-02-20 James Larus <larus@Jim-Macbook-Max.local>
* spim/spim.cpp
[https://sourceforge.net/p/spimsimulator/bugs/102/:
Helpstring for -assemble option to spim was incorrect.
2021-12-06 Larus <larus@Jim-Macbook-Air>
* Release: 9.1.23
2021-12-05 larus <larus@ubuntu>
* QtSpim.pro
Work around pointless error message from gnutils mv.
* bin/release-debian
Update paths
2021-12-05 U-DESKTOP-OQE31KH\Larus <Larus@DESKTOP-OQE31KH>
* bin/release-win:
Fix paths for QT 5.
* QtSpim.pro:
Fixed mismatched parser file names and eliminated cached copies of parser and scanner.
Use Linux sh to move files, not cmd.
2021-12-04 Larus <larus@Jim-Macbook-Air>
* QtSpim/macinfo.plist
[https://sourceforge.net/p/spimsimulator/bugs/87/]:
Fix version number for MacOS Finder.
* README, README.rtf
Note that QtSpim does not compile with QT version 6.
* QtSpim_Mac.pkgproj, release-osx:
Fix paths for Qt5.
2021-10-19 Larus <larus@Jim-Macbook-Air>
* data.cpp, inst.cpp, run.h:
Eliminate compiler warnings.
2021-10-11 Larus <larus@Jim-Macbook-Air>
* data.cpp, inst.cpp, parser.y [https://sourceforge.net/p/spimsimulator/bugs/100/]:
Fix .align directive
2021-09-20 Larus <larus@Jim-Macbook-Air>
* Update test case.
2020-12-19 Larus <larus@Jim-Macbook-Air>
* CPU/parser.y Tests/tt.bare.s [https://sourceforge.net/p/spimsimulator/bugs/99/]:
Missing nops in code generated for pseduo instructions when
running with delayed branches.
2020-12-05 Larus <larus@Jim-Macbook-Air>
* CPU/run.cpp, spim-utils.cpp, reg.h, display-utils.cpp Tests/tt.core.s [https://sourceforge.net/p/spimsimulator/bugs/98/]:
Fix floating point condition code, which only really worked for CC = 0, default.
2020-07-13 Larus <larus@Jim-Macbook-Air>
* CPU/inst.cpp [https://sourceforge.net/p/spimsimulator/bugs/97/]:
Incorrect call to write_ouput allows string injection.
2020-06-02 Larus <larus@Jim-Macbook-Air>
* CPU/inst.{cpp,h}, spim/Makefile [https://sourceforge.net/p/spimsimulator/bugs/96/]:
Fix problem with incorrect decoding of binary values for FP instructions.
2020-05-09 larus <larus@ubuntu>
* Release 9.1.22 (Linux only):
* QtSpim/QtSpim.pro:
Use libGL from Qt installation rather than require full installation of OpenCL.
* bin/release-debin:
Fix Linux by explicity adding libraries files that aren't dll'ed.
2020-01-17 Larus <larus@Jim-Macbook-Air>
* Release 9.1.21
* CPU/version.h:
2020-01-15 Larus <larus@Jim-Macbook-Air>
* CPU/parser.y:
Fixed type error (g++-9).
2020-01-14 Larus <larus@Jim-Macbook-Air>
* Update copyrights.
* Simplify MacOS packaging by moving file update to shell script
from Packages specification.
* Cleanup QMake process a bit.
2020-01-13 Larus <larus@Jim-Macbook-Air>
* QtSpim/QtSpim.pro:
Delete unused statements.
2019-11-03 Larus <larus@Jim-Macbook-Air>
* CPU/inst.cpp (inst_decode) [jashank.jeremy@unsw.edu.au]:
Miss second highest order bit in j instruction due to bad mask.
2019-04-13 Larus <larus@Jim-Macbook-Air>
* Documentation/H_P_AppendixA/HP_AppA.html [https://sourceforge.net/p/spimsimulator/bugs/88:
Formatting problems in typos in mflo, mfhi.
2018-11-23 Larus <larus@Jim-Macbook-Air>
* README (https):
Fix URLs for sourceforge.
2018-11-09 Larus <larus@Jim-Macbook-Air>
* Documentation/H_P_AppendixA/HP_AppA.html [https://sourceforge.net/p/spimsimulator/bugs/86/]:
Opcode for swc1 was documented incorrectly as 0x31 instead of 0x39.
2018-09-16 Larus <larus@Jim-Macbook-Air>
* spim/Makefile, xspim/Makefile
[https://sourceforge.net/p/spimsimulator/patches/6]:
Improvements to Makefiles
2017-08-29 Larus <larus@Jim-Macbook-Air>
* CPU/version.h (SPIM_VERSION):
Release 9.1.20
* spimview.ui [https://sourceforge.net/p/spimsimulator/bugs/81]:
Typo "parmeter"
* state.cpp [https://sourceforge.net/p/spimsimulator/bugs/81]:
Add message warning QtSpim will exit to restore window state.
2017-07-28 <larus@IC-LMC-ICDO-01>
* Setup/QtSpim_Win_Deployment:
Delete VisualStudio projects (InstallShield no longer works) and
move to WiX to build installer.
* QtSpim/menu.cpp (help_ViewHelp):
Use full path for help file on Windows so QtSpim can run anywhere.
2017-07-25 Larus <larus@Jim-Macbook-Air>
* CPU/version.h (SPIM_VERSION):
Release 9.1.19
2017-06-09 Larus <larus@Jim-Macbook-Air>
* QtSpim/main.cpp (main):
Explicitly specify organization name and url to work around
incompatibility on MacOS for settings.
2017-02-18 Larus <larus@Jim-Macbook-Air>
* QtSpim/regwin.cpp (formatFloat) [https://sourceforge.net/p/spimsimulator/bugs/76/]:
Display binary values for floats to 32 bits.
2017-01-20 Larus <larus@Jim-Macbook-Air>
*
Rebuild QtSpim on Mac with Qt5.5 because Qt5.7 has broken
macdeployqt that does not update paths to frameworks in frameworks
copied into the app.
2017-01-03 Larus <larus@Jim-Macbook-Air>
*
Release 9.1.18
2017-01-03 James Larus <larus@ubuntu>
* control.prototype, qtspim.desktop:
Update version number.
* QtSpim/QtSpim.pro, bin/release-debian:
Set RPATH in linker rather than using chrpath (which breaks in Ubuntu 16.04).
2017-01-03 Larus <larus@Jim-Macbook-Air>
* spimview.cpp:
Update organization name.
* macinfo.plist:
Update version number.
* spim-utils.cpp, version.h:
Update copyright date and release date.
2016-11-25 Larus <larus@Jim-Macbook-Air>
* QtSpim/spimview.cpp, menu.cpp, settings.ui [Renaud PACALET pacalet@users.sf.ne]:
Add button to reset exception handler to default.
* QtSpim/QtSpim.pro, CPU/*.c, spim/Makefile:
Move over completely to c++ compilation since the new version of
Qt requires c++11.
2016-11-23 Larus <larus@Jim-Macbook-Air>
* CPU/version.h
Version 9.1.18
* Documentation/H_P_AppendixA/HHP_AppA.html:
Fix register usage for syscalls in Table 9.1.
2016-02-27 Larus <larus@Jim-Macbook-Air>
* QtSpim/menu.cpp:
Unnecessary refresh of register display.
* QtSpim/spimview.h, regwin.cpp:
Did not highlight changes to double precision registers correctly.
2015-12-29 Larus <larus@Jim-Macbook-Air>
* CPU/version.h (SPIM_VERSION):
Version 9.1.17
* summary.rtf:
Update installation instructions for latest OS X.
* QtSpim/QtSpim.pro, menu.cpp [https://sourceforge.net/p/spimsimulator/bugs/71/]:
Fix creation of qtspim.qhc file to eliminate embedded paths.
* menu.cpp, spimview.cpp, spimview.h:
Highlight spim notice with color.
2015-12-28 Larus <larus@ubuntu>
* bin/release-debian [https://sourceforge.net/p/spimsimulator/support-requests/9/]:
Forgot sqldriver on Linux.
2015-12-28 Larus <larus@Jim-Macbook-Air>
* CPU/scanner.l [https://sourceforge.net/p/spimsimulator/bugs/66/]:
Improvement to previous fix for flex version detection.
2015-12-21 Larus <larus@Jim-Macbook-Air>
* QtSpim/state.cpp (writeSettings):
Added check box for spim quiet mode.
2015-09-17 <larus@IC-LMC-ICDO-01>
* QtSpim/regwin.cpp, QtSpim/datawin.cpp [https://sourceforge.net/p/spimsimulator/bugs/60/]
Fix of bug 60 did not work on Windows because of difference in
treatment of hex literals from Mac.
2015-08-27 Larus <larus@Jim-Macbook-Air>
* README, README.rtf;
Update build instructions further.
2015-08-25 Larus <larus@ubuntu>
* CPU/version.h (SPIM_VERSION):
Version 9.1.16
* README, README.rtf:
Update build instructions.
* QtSpim/spimview.cpp (initialize_world):
Update copyright notice for QtSpim to notify that Qt uses LGPL.
* QtSpim/QtSpim.pro:
Configuration name changed from linux-g++ -> linux-g++-32
2015-04-26 Larus <larus@Jim-MacBook-Air.local>
* CPU/version.h (SPIM_VERSION):
Fix installation on Mac to include all libraries.
Version 9.1.15.
2015-03-12 Larus <larus@icdhcp-1-044.epfl.ch>
* QtSpim/state.cpp (win_Restore):
Add command on Windows menu to restore windows to initial default configuration.
2015-03-11 Larus <larus@icdhcp-1-044.epfl.ch>
* QtSpim/datawin.cpp (formatPartialQuadWord) [https://sourceforge.net/p/spimsimulator/bugs/61/]:
Problem printing partial word at end of memory space.
* CPU/scanner.l:
Change of 2/18 made a number followed by a comma and space
ambiguous. Now FP numbers must have a digit following decimal
point (decimal comma).
2015-02-18 Larus <larus@ubuntu>
* QtSpim/regwin.cpp, QtSpim/datawin.cpp [https://sourceforge.net/p/spimsimulator/bugs/60/]
Setting register and memory contents in QtSpim did not allow
negative hex numbers (0xf....).
2015-02-18 Larus <larus@icdhcp-1-196.epfl.ch>
* spim/spim.c (top_level):
Fixed spim's handling of stdin to allow it to read commands from
redirected input.
* CPU/scanner.l:
Allow comma (,) and apostraphe (') as decimal separator in
floating point numbers.
* QtSpim/menu.cpp (help_ViewHelp):
Fix Mac help.
2015-02-17 Larus <larus@icdhcp-1-196.epfl.ch>
* QtSpim/textwin.cpp (DisplayTextSegments):
Force redisplay of text segment when font changes.
* QtSpim/console.cpp (WriteOutput) [https://sourceforge.net/p/spimsimulator/patches/3/]:
Ensure console output stays visible.
2015-02-17 <larus@IC-LMC-ICDO-01>
* CPU/syscall.c (myInvalidParameterHandler) [https://sourceforge.net/p/spimsimulator/bugs/46/]:
Bad parameter to system call invoked Windows Error Reporting and
crashed spim. Instead, report error in spim.
2014-08-21 Larus <larus@Jim-MacBook-Air.local>
* Documentation/SourceForge/index.html:
Update links to Qt source.
2014-05-31 Larus <larus@Jim-MacBook-Air.local>
* spim/spim.c [Jorge Garcia Aguilar <jorgegarag@gmail.com>]:
Add -dump and -full_dump flags to write data and text segments
to a file.
2014-02-02 Larus <larus@Jim-MacBook-Air.local>
* Setup/QtSpim_Mac_Deployment/QtSpim_Mac_pkproj:
Fixed Mac install to include instructions how to work around
Gatekeeper rejection of unsigned apps.
2014-01-26 Larus <larus@Jim-MacBook-Air.local>
* CPU/version.h (SPIM_VERSION):
Version 9.1.13
* QtSpim/macinfo.plist, QtSpim/QtSpim.pro, NewIcon.icns:
Added application icon for MacOS.
* bin/release-osx
[Philip James, https://sourceforge.net/p/spimsimulator/bugs/54]:
Need to package Frameworks and plugs with Mac release and change
file paths so they can be found.
2014-01-22 Larus <larus@Jim-MacBook-Air.local>
* CPU/op.h [Philip Machanick <p.machanick@ru.ac.za>]:
Break instruction does not take any arguments.
2013-12-28 <larus@IC-LMC-ICDO-01>
* Documentation/SourceForge/index.html:
Bad path to files on SourceForge.
2013-12-17 <larus@IC-LMC-ICDO-01>
* New release of QtSpim for Windows to include msvcp110.dll.
2013-12-14 Larus <larus@Jim-MacBook-Air.local>
* CPU/version.h (SPIM_VERSION):
Version 9.1.12
* QtSpim/menu.cpp (help_ViewHelp):
Further adjustment of file positions on Mac OS.
2013-12-13 Larus <larus@Jim-MacBook-Air.local>
* QtSpim/help/qtspim.qhcp, QtSpim/help/qtspim.qhp:
Fix naming issues in QtSpim help. Open at top of page.
* QtSpim/menu.cpp (help_ViewHelp):
Properly launch Qt Assistant on Mac OS.
2013-12-11 Larus <larus@icdhcp-1-098.epfl.ch>
* QtSpim/QtSpim.pro:
Set flags for clang on Mac OS.
* CPU/run.c (run_spim):
Eliminate nop assignments caught by clang.
2013-12-10 <larus@IC-LMC-ICDO-01>
* CPU/version.h:
Version 9.1.11:
* CPU/inst.c, CPU/op.h, CPU/parser.y, Tests/tt.core.s:
MOVF and MOVT instructions were improperly parsed, stored, and unparsed.
* CPU/data.c (increment_data_pc):
[https://sourceforge.net/p/spimsimulator/bugs/53]:
Off-by-one error in computing space when growing data segment.
* QtSpim/regwin.cpp:
Display FP control register index values, not contents.
2013-12-09 <larus@IC-LMC-ICDO-01>
* Switched to Visual Studio 2012, ported installer to
InstallShieldLE since VS installer no longer supported.
2013-12-08 <larus@IC-LMC-ICDO-01>
* CPU/version.h:
Version 9.1.10
2013-11-14 <larus@IC-LMC-ICDO-01>
* CPU/inst.c (eval_imm_expr):
[https://sourceforge.net/p/spimsimulator/bugs/51]:
Incorrectly handled indexed offset of extern symbol.
2013-11-10 <larus@IC-LMC-ICDO-01>
* QtSpim/datawin.cpp (formatWord):
[https://sourceforge.net/p/spimsimulator/bugs/52]:
Negative decimal should be preceeded by spaces, not zeros, when
printing data.
2013-10-27 Larus <larus@ubuntu>
* Setup/qtspim_debian_deployment/control.prototype:n
Added Installed-Size field in DEBIAN/control file.
2013-10-15 <larus@IC-LMC-ICDO-01>
* QtSpim/datawin.c QtSpim/spimview.h
[https://sourceforge.net/p/spimsimulator/bugs/50]:
Did not properly format and print data segments that were not a
multiple of 16 bytes.
2013-10-14 <larus@IC-LMC-ICDO-01>
* CPU/scanner.l [https://sourceforge.net/p/spimsimulator/bugs/49]:
Did not properly scan escaped characters (e.g. '\n').
2013-10-13 <larus@IC-LMC-ICDO-01>
* QtSpim/main.cpp, QtSpim/QtSpim.pro, QtSpim/spim_support.c
[https://sourceforge.net/p/spimsimulator/bugs/47]
[https://sourceforge.net/p/spimsimulator/bugs/48]:
Port QtSpim to Qt 5.1.
2013-07-20 <JIM@LS-RED>
* QtSpim/help/HP_AppA.html [Matthias Herlich herlich@upb.de]:
Definition of caller/callee saved registers reversed!
2013-06-02 <JIM@LS-RED>
* CPU/inst.c (format_an_inst) [Daniel Chester <chester@mail.eecis.udel.edu>]:
FP compare (e.g. c.eq.s) instructions ignored condition flag
numbers. The FP move (e.g. movt.s) instructions did not default
condition flag.
2013-03-23 <JIM@LS-RED>
* CPU/data.c (extern_directive) [https://sourceforge.net/p/spimsimulator/bugs/44/]:
Multiple instance of extern directive resolved to distinct locations.
* CPU/inst.c (i_type_inst_full_word) [https://sourceforge.net/p/spimsimulator/feature-requests/11/]:
LW/SW of 0x8000..0xffff generated incorrect code.
2013-01-19 <JIM@LS-RED>
* CPU/version.h:
Version 9.1.9
* helloworld.s [https://sourceforge.net/p/spimsimulator/feature-requests/8/]:
Added hello world example
2013-01-06 <JIM@LS-RED>
* spimview.cpp, console.cpp [http://sourceforge.net/p/spimsimulator/feature-requests/9/]:
Use fixed width font for spim output to line up colums properly
2012-12-16 <JIM@LS-RED>
* QtSpim/QtSpim.pro [sourceforge #37: https://sourceforge.net/u/smeenai/]:
Fix flex output file argument specification.
Include optional defines for using Win move and del commands.
2012-12-09 <Jim@X64PC>
* CPU/version.h (SPIM_VERSION):
Version 9.1.8
* CPU/scanner.l [Tom Murphy wolfmurphy@gmail.com]:
Overwrote first digit in \ooo escape sequence in string.
* CPU/inst.c (i_type_inst) [Tom Murphy wolfmurphy@gmail.com]:
Crashed at teqi instruction.
2012-10-21 <Jim@X64PC>
* QtSpim/main.cpp (parseCommandLine):
Allow multiple input files on the command line.
* QtSpim/console.cpp (WriteOutput):
Activate console window on input or output to raise it and give it focus.
2012-10-13 <Jim@X64PC>
* CPU/sym-tbl.c (resolve_a_label_sub):
Error message indicates bare machine to explain why memory address
is too large.
2012-02-25 <Jim@LS-RED>
* QtSpim/menu.cpp (file_LoadFile):
Allow .a extension for assembly file.
2012-02-12 <Jim@X64PC>
* CPU/version.h:
Version 9.1.7
2012-02-11 <Jim@LS-RED>
* QtSpim/spimview.h:
Include version.h to catch dependence in menu.c on version number.
2012-02-04 <Jim@LS-RED>
* CPU/version.:
Version 9.1.6
* QtSpim/regwin.cpp (formatInt) [Jeff Gitlin <jeff.gitlin@gmail.com>]:
Returned sign-extended 64bit formatted values for negative numbers.
2012-01-07 <Jim@LS-RED>
* CPU/data.c (increment_data_pc), inst.c, tt.core.s [Artur Golisz <artur_waw@ymail.com>]:
Did not grow data segments properly when allocating memory with
the .space command.
2012-01-02 <Jim@X64PC>
* CPU/spim-utils.c (write_startup_message):
Updated copyright date.
2012-01-02 <Jim@LS-RED>
* CPU/version.h:
Version 9.1.5
* Setup/qtspim_debian_deployment/control.prototype:
More precise dependencies for qt packages >= 4.7 to fix setup problems.
2011-12-03 <Jim@LS-RED>
* QtSpim/main.cpp (parseCommandLine): [Esteban Stafford (estebanstafford)]:
Did not correctly initialize memory with -file argument.
* QtSpim/menu.cpp, console.cpp, console.h [Esteban Stafford (estebanstafford)]:
Got in an infinite loop when single stepping or running
interpreter blocked waiting for input.
2011-09-04 <Jim@X64PC>
* CPU/version.h (SPIM_VERSION):
Version 9.1.4
2011-11-25 <Jim@LS-RED>
* spim/Makefile [W. Michael Petullo ( flyn )]:
Inherit flags from environment.
2011-08-14 <Jim@LS-RED>