diff options
| -rw-r--r-- | quine.asm | 91 |
1 files changed, 82 insertions, 9 deletions
diff --git a/quine.asm b/quine.asm index fdf55c9..e16471e 100644 --- a/quine.asm +++ b/quine.asm @@ -2654,20 +2654,36 @@ cold_start: ;;; popcontrol, next ;;; swap, drop, drop2, roll, unroll, roll3, unroll3, dup, dup2 ;;; add, sub, mul, divmod - ;;; eq, ne, gt, lt, ge, le, and, or, xor, invert + ;;; eq, ne, gt, lt, ge, le + ;;; gt_unsigned, lt_unsigned, ge_unsigned, le_unsigned + ;;; and, or, xor, invert ;;; lit, litstring ;;; store, fetch + ;;; fetch_control_stack, store_control_stack + ;;; TODO needs heap impl + ;;; fetch_value_stack, store_value_stack + ;;; TODO needs heap impl ;;; addstore, substore, store8, fetch8, store16, fetch16, store32, fetch32 ;;; memcopy, stringlen + ;;; reverse_stringlen, reverse_padding_len + ;;; TODO needs heap impl + ;;; stringcmp + ;;; TODO needs heap impl ;;; no dependencies except next for any of these ;;; branch, zbranch ;;; sorta needs a label but might be avoidable ;;; needs next + ;;; execute + ;;; TODO needs heap impl ;;; sys_exit, sys_write ;;; nothing special ;;; Forth: ;;; emitstring ;;; stringlen, sys_write, basics + ;;; dot dothex dothex8 dothex16 dothex32 dothex64 dotbase dotbase_unsigned + ;;; TODO needs heap impl + ;;; pow logfloor logceil + ;;; TODO needs heap impl ;;; Assembly: ;;; crash ;;; nothing special @@ -2677,8 +2693,9 @@ cold_start: ;;; Assembly: ;;; litpack64, litpack32, litpack16, litpack8 ;;; beforenext, pack* + ;;; TODO this is as far as the copy-to-heap implementations above have gotten ;;; Forth: - ;;; rax, rcx, dx, rbx, rsp, rbp, rsi, rdi + ;;; rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi ;;; r8, r9, r10, r11, r12, r13, r14, r15 ;;; eax, ecx, edx, ebx, esp, ebp, esi, edi ;;; ax, cx, dx, bx, sp, bp, si, di @@ -2698,7 +2715,7 @@ cold_start: ;;; cld, std, mov_reg64_imm64, mov_extrareg64_imm64, mov_reg64_reg64, ;;; mov_indirect_reg64_reg64, mov_disp8_reg64_reg64, ;;; mov_reg64_indirect_reg64, mov_reg64_disp8_reg64, - ;;; mov_reg64_indexed_reg64, + ;;; mov_reg64_indexed_reg64, mov_indexed_reg64_reg64, ;;; mov_indirect_reg64_reg32, mov_disp8_reg64_reg32, ;;; mov_reg32_indirect_reg64, mov_reg32_disp8_reg64, ;;; mov_indirect_reg64_reg16, mov_disp8_reg64_reg16, @@ -2708,21 +2725,75 @@ cold_start: ;;; lea_reg64_disp8_reg64, lea_reg64_indexed_reg64, ;;; lea_reg64_disp8_indexed_reg64, ;;; push_reg64, pop_reg64, - ;;; lodsq, rep_movs8, rep_mov16, rep_movs32, rep_movs64, repnz_scas8, + ;;; movs8, movs16, movs32, movs64, + ;;; rep_movs8, rep_movs16, rep_movs32, rep_movs64, + ;;; lods8, lods16, lods32, lods64, + ;;; rep_lods8, rep_lods16, rep_lods32, rep_lods64, + ;;; stos8, stos16, stos32, stos64, + ;;; rep_stos8, rep_stos16, rep_stos32, rep_stos64, + ;;; cmps8, cmps16, cmps32, cmps64, + ;;; repz_cmps8, repz_cmps16, repz_cmps32, repz_cmps64, + ;;; repnz_cmps8, repnz_cmps16, repnz_cmps32, repnz_cmps64, + ;;; scas8, scas16, scas32, scas64, + ;;; repz_scas8, repz_scas16, repz_scas32, repz_scas64, + ;;; repnz_scas8, repnz_scas16, repnz_scas32, repnz_scas64, ;;; add_reg64_reg64, add_indirect_reg64_reg64, add_reg64_indirect_reg64, ;;; add_reg64_imm8, ;;; sub_reg64_reg64, sub_indirect_reg64_reg64, - ;;; mul_reg64_reg64, divmod_reg64, idivmod_reg64, inc_reg64, dec_reg64, - ;;; and_reg64_reg64, or_reg64_reg64, or_reg64_imm8, xox_reg64_reg64, + ;;; mul_reg64, divmod_reg64, idivmod_reg64, inc_reg64, dec_reg64, + ;;; and_reg64_reg64, and_reg64_imm8, + ;;; or_reg64_reg64, or_reg64_imm8, + ;;; xox_reg64_reg64, ;;; not_reg64, ;;; cmp_reg64_reg64, test_reg64_reg64, - ;;; set_reg8_cc, jmp_cc_rel_imm8, jmp_abs_indirect_reg64, jmp_rel_imm32, + ;;; set_reg8_cc, jmp_cc_rel_imm8, jmp_cc_rel_im32, + ;;; jmp_abs_indirect_reg64, jmp_rel_imm8, jmp_rel_imm32, ;;; syscall, hlt ;;; basics plus assembly helpers + ;;; TODO this next stuff is way more interleaved than it needs to be ;;; Forth, not needed on heap: ;;; early_heap, early_s0, early_r0, early_latest, early_here - ;;; early_create, early_comma, early_self_codeword, early_here_store, - ;;; pack_next, early_variable + ;;; early_find + ;;; find_in + ;;; Forth, needed on heap: + ;;; find_in + ;;; Forth, not needed on heap: + ;;; early_next_newer_entry + ;;; next_newer_entry_in + ;;; Forth, needed on heap: + ;;; next_newer_entry_in, + ;;; entry_to_execution_token, + ;;; fetch_entry_flags, + ;;; store_entry_flags, + ;;; entry_to_name, + ;;; Forth, not needed on heap: + ;;; early_guess_entry_end + ;;; Forth, needed on heap: + ;;; guess_entry_end_in + ;;; execution_token_to_entry + ;;; Forth, not needed on heap: + ;;; early_show_source + ;;; Forth, needed on heap: + ;;; show_source_between + ;;; Forth, not needed on heap: + ;;; early_show_hex + ;;; Forth, needed on heap: + ;;; show_hex_between + ;;; Forth, not needed on heap: + ;;; early_show_source_or_hex + ;;; Forth, needed on heap: + ;;; show_source_or_hex_between + ;;; Forth, not needed on heap: + ;;; early_describe + ;;; early_describe_all + ;;; Forth, needed on heap: + ;;; Forth, not needed on heap: + ;;; early_create, early_comma, early_self_codeword, early_docol_codeword, + ;;; early_here_store, + ;;; Forth, needed on heap: + ;;; pack_next, pack_beforenext, pack_pushcontrol, pack_popcontrol, + ;;; Forth, not needed on heap: + ;;; early_variable ;;; ;;; It's likely that nothing past this point is required for the heap copy, ;;; but it's here for completeness. @@ -2742,6 +2813,8 @@ cold_start: ;;; nothing special in any of these (they do want use/set_label) ;;; self_raw ;;; self-reference + ;;; Not a real word: + ;;; end_segment ;;; dq quit |