diff options
Diffstat (limited to 'quine.asm')
| -rw-r--r-- | quine.asm | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/quine.asm b/quine.asm index b4edf5b..9e5da26 100644 --- a/quine.asm +++ b/quine.asm @@ -2040,8 +2040,16 @@ cold_start: ; unroll sounds nicer and it's only a single character longer. You might say ; it rolls off the tongue better. dq litstring, "unroll", early_create, early_self_codeword, early_here, fetch - ; TODO - dq lit, 8, packalign, early_here_store + dq rcx, pop_reg64 + dq rcx, dec_reg64 + dq rcx, rdx, mov_reg64_reg64 + dq rsp, rbp, mov_reg64_indirect_reg64 + dq rsi, push_reg64 + dq rsp, lit, 16, rsi, lea_reg64_disp8_reg64 + dq rsp, lit, 8, rdi, lea_reg64_disp8_reg64 + dq rep_movs64 + dq rbx, rsp, rdx, lit, 8, mov_indexed_reg64_reg64 + dq pack_next, lit, 8, packalign, early_here_store ; This was "roll3". dq litstring, "3roll", early_create, early_self_codeword, early_here, fetch @@ -3683,7 +3691,7 @@ defword mov_reg64_disp8_reg64, 0 ; Stack: ; output point -; source register name +; source base register name ; source index register name ; source index scale factor, as a count of bytes ; target register name @@ -3696,6 +3704,19 @@ defword mov_reg64_indexed_reg64, 0 ; Stack: ; output point ; source register name +; target base register name +; target index register name +; target index scale factor, as a count of bytes +defword mov_indexed_reg64_reg64, 0 + dq docol + dq lit, 5, roll, rex_w, lit, 0x89, pack8, lit, 5, unroll + dq lit, 4, roll, reg64, lit, 4, unroll + dq unroll3, swap, addressing_indexed_reg64 + dq exit + +; Stack: +; output point +; source register name ; target register name defword mov_indirect_reg64_reg32, 0 dq docol @@ -3832,7 +3853,7 @@ defword lea_reg64_disp8_reg64, 0 ; Stack: ; output point -; source register name +; source base register name ; source index register name ; source index scale factor, as a count of bytes ; target register name @@ -3844,7 +3865,7 @@ defword lea_reg64_indexed_reg64, 0 ; Stack: ; output point -; source register name +; source base register name ; source index register name ; source index scale factor, as a count of bytes ; source displacement value |