From fee1bbd8b4681acca7daba1b3b70ce6d26e52fb4 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Fri, 21 Feb 2020 10:05:04 -0800 Subject: [PATCH] 6041 - array indexing starting to work And we're using it now in factorial.mu! In the process I had to fix a couple of bugs in pointer dereferencing. There are still some limitations: a) Indexing by a literal doesn't work yet. b) Only arrays of ints supported so far. Looking ahead, I'm not sure how I can support indexing arrays by non-literals (variables in registers) unless the element size is a power of 2. --- apps/factorial.mu | 14 ++++--- apps/mu | Bin 149979 -> 152298 bytes apps/mu.subx | 104 +++++++++++++++++++++++++++++++++++++++++++--- mu_instructions | 10 +++++ mu_summary | 6 +++ 5 files changed, 124 insertions(+), 10 deletions(-) diff --git a/apps/factorial.mu b/apps/factorial.mu index 6117d153..de5bcf54 100644 --- a/apps/factorial.mu +++ b/apps/factorial.mu @@ -1,7 +1,7 @@ -# usage is finicky for now: +# usage: # ./translate_mu apps/factorial.mu -# ./a.elf test # any args? run tests -# ./a.elf # no args? run factorial(5) +# ./a.elf test # to run tests +# ./a.elf # to run factorial(5) fn main args: (addr array kernel-string) -> exit-status/ebx: int { var a/eax: (addr array kernel-string) <- copy args var tmp/ecx: int <- length a @@ -14,11 +14,15 @@ fn main args: (addr array kernel-string) -> exit-status/ebx: int { exit-status <- copy tmp break $main-body } - # if (len(args) != 1) run-tests() + # if (args[1] == "test") run-tests() + var tmp2/ecx: int <- copy 1 # we need this just because we don't yet support `index` on literals; requires some translation-time computation + var tmp3/ecx: (addr kernel-string) <- index a, tmp2 + var tmp4/eax: boolean <- kernel-string-equal? *tmp3, "test" + compare tmp4, 0 { break-if-= run-tests - exit-status <- copy 0 + exit-status <- copy 0 # TODO: get at Num-test-failures somehow } } } diff --git a/apps/mu b/apps/mu index 580da3a6c7abd9696a5672a0edec263de8bef4e8..86258bcda73d94a7edc16b5d8ded8e934a14a030 100755 GIT binary patch literal 152298 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 E2f>;EH~;_u literal 149979 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 N=*j4>9Wx~Je*hOiVrc*X diff --git a/apps/mu.subx b/apps/mu.subx index b65909ad..bd3a4b96 100644 --- a/apps/mu.subx +++ b/apps/mu.subx @@ -32,8 +32,6 @@ # eax ecx edx ebx esi edi # Variables in registers must be primitive 32-bit types. # Variables not explicitly placed in a register are on the stack. -# Variables in registers need not have a name; in that case you refer to them -# directly by the register name. # # Function inputs are always passed in memory (on the stack), while outputs # are always returned in registers. @@ -955,6 +953,52 @@ test-convert-function-with-local-var-dereferenced: 5d/pop-to-ebp c3/return +test-convert-compare-register-with-literal: + # . prologue + 55/push-ebp + 89/<- %ebp 4/r32/esp + # setup + (clear-stream _test-input-stream) + (clear-stream $_test-input-buffered-file->buffer) + (clear-stream _test-output-stream) + (clear-stream $_test-output-buffered-file->buffer) + c7 0/subop/copy *Next-block-index 1/imm32 + # + (write _test-input-stream "fn foo {\n") + (write _test-input-stream " var x/ecx: int <- copy 0\n") + (write _test-input-stream " compare x, 0\n") + (write _test-input-stream "}\n") + # convert + (convert-mu _test-input-buffered-file _test-output-buffered-file) + (flush _test-output-buffered-file) +#? # dump _test-output-stream {{{ +#? (write 2 "^") +#? (write-stream 2 _test-output-stream) +#? (write 2 "$\n") +#? (rewind-stream _test-output-stream) +#? # }}} + # check output + (check-next-stream-line-equal _test-output-stream "foo:" "F - test-convert-compare-register-with-literal/0") + (check-next-stream-line-equal _test-output-stream " # . prologue" "F - test-convert-compare-register-with-literal/1") + (check-next-stream-line-equal _test-output-stream " 55/push-ebp" "F - test-convert-compare-register-with-literal/2") + (check-next-stream-line-equal _test-output-stream " 89/<- %ebp 4/r32/esp" "F - test-convert-compare-register-with-literal/3") + (check-next-stream-line-equal _test-output-stream " {" "F - test-convert-compare-register-with-literal/4") + (check-next-stream-line-equal _test-output-stream "$foo:0x00000001:loop:" "F - test-convert-compare-register-with-literal/5") + (check-next-stream-line-equal _test-output-stream " ff 6/subop/push %ecx" "F - test-convert-compare-register-with-literal/6") + (check-next-stream-line-equal _test-output-stream " b9/copy-to-ecx 0/imm32" "F - test-convert-compare-register-with-literal/7") + (check-next-stream-line-equal _test-output-stream " 81 7/subop/compare %ecx 0/imm32" "F - test-convert-compare-register-with-literal/8") + (check-next-stream-line-equal _test-output-stream " 8f 0/subop/pop %ecx" "F - test-convert-compare-register-with-literal/9") + (check-next-stream-line-equal _test-output-stream " }" "F - test-convert-compare-register-with-literal/10") + (check-next-stream-line-equal _test-output-stream "$foo:0x00000001:break:" "F - test-convert-compare-register-with-literal/11") + (check-next-stream-line-equal _test-output-stream " # . epilogue" "F - test-convert-compare-register-with-literal/12") + (check-next-stream-line-equal _test-output-stream " 89/<- %esp 5/r32/ebp" "F - test-convert-compare-register-with-literal/13") + (check-next-stream-line-equal _test-output-stream " 5d/pop-to-ebp" "F - test-convert-compare-register-with-literal/14") + (check-next-stream-line-equal _test-output-stream " c3/return" "F - test-convert-compare-register-with-literal/15") + # . epilogue + 89/<- %esp 5/r32/ebp + 5d/pop-to-ebp + c3/return + test-convert-function-with-local-var-in-block: # . prologue 55/push-ebp @@ -3958,11 +4002,12 @@ $add-operation-and-inputs-to-stmt:read-inouts: 3d/compare-eax-and 0x2a/imm32/asterisk { 75/jump-if-!= break/disp8 +$add-operation-and-inputs-to-stmt:inout-is-deref: ff 0/subop/increment *ecx ba/copy-to-edx 1/imm32/true } (lookup-var-or-literal %ecx *(ebp+0x10)) # => eax - (append-list Heap %eax *(edi+8)) # Stmt1-inouts or Regvardef-inouts => eax + (append-stmt-var Heap %eax *(edi+8) %edx) # Stmt1-inouts or Regvardef-inouts => eax 89/<- *(edi+8) 0/r32/eax # Stmt1-inouts or Regvardef-inouts e9/jump loop/disp32 } @@ -5467,6 +5512,38 @@ $emit-subx-stmt-list:array-length: e9/jump $emit-subx-statement:end/disp32 } # }}} + # array index {{{ + # TODO: support literal index + { + # if (!string-equal?(var->operation, "index")) break + (string-equal? *(ecx+4) "index") # Stmt1-operation => eax + 3d/compare-eax-and 0/imm32 + 0f 84/jump-if-= break/disp32 +$emit-subx-stmt-list:index: + (emit-indent *(ebp+8) *Curr-block-depth) + (write-buffered *(ebp+8) "8d/copy-address *(") + # inouts[0]->register " + " + 8b/-> *(ecx+8) 0/r32/eax # Stmt1-inouts + 8b/-> *eax 0/r32/eax # List-value + (write-buffered *(ebp+8) *(eax+0x10)) # Var-register => eax + # + (write-buffered *(ebp+8) " + ") + # inouts[1]->register + 8b/-> *(ecx+8) 0/r32/eax # Stmt1-inouts + 8b/-> *(eax+4) 0/r32/eax # List-next + 8b/-> *eax 0/r32/eax # List-value + (write-buffered *(ebp+8) *(eax+0x10)) # Var-register => eax + # + (write-buffered *(ebp+8) "<<2 + 4) ") + # outputs[0] "/r32" + 8b/-> *(ecx+0xc) 0/r32/eax # Stmt1-outputs + 8b/-> *eax 0/r32/eax # List-value + (get Registers *(eax+0x10) 8 "Registers") # Var-register => eax + (print-int32-buffered *(ebp+8) *eax) + (write-buffered *(ebp+8) "/r32\n") + e9/jump $emit-subx-statement:end/disp32 + } + # }}} # if stmt matches a primitive, emit it { $emit-subx-statement:check-for-primitive: @@ -7225,11 +7302,26 @@ emit-subx-call-operand: # out: (addr buffered-file), s: (handle stmt-var) 8b/-> *(ebp+0xc) 1/r32/ecx # var operand/esi: (handle var) = s->value 8b/-> *ecx 6/r32/esi # Stmt-var-value - # if (operand->register) emit "%__" + # if (operand->register && s->is-deref?) emit "*__" { +$emit-subx-call-operand:check-for-register-indirect: 81 7/subop/compare *(esi+0x10) 0/imm32 # Var-register 74/jump-if-= break/disp8 -$emit-subx-call-operand:register: + 81 7/subop/compare *(ecx+8) 0/imm32/false # Stmt-var-is-deref + 74/jump-if-= break/disp8 +$emit-subx-call-operand:register-indirect: + (write-buffered *(ebp+8) " *") + (write-buffered *(ebp+8) *(esi+0x10)) # Var-register + e9/jump $emit-subx-call-operand:end/disp32 + } + # if (operand->register && !s->is-deref?) emit "%__" + { +$emit-subx-call-operand:check-for-register-direct: + 81 7/subop/compare *(esi+0x10) 0/imm32 # Var-register + 74/jump-if-= break/disp8 + 81 7/subop/compare *(ecx+8) 0/imm32/false # Stmt-var-is-deref + 75/jump-if-!= break/disp8 +$emit-subx-call-operand:register-direct: (write-buffered *(ebp+8) " %") (write-buffered *(ebp+8) *(esi+0x10)) # Var-register e9/jump $emit-subx-call-operand:end/disp32 @@ -7278,6 +7370,7 @@ emit-subx-var-as-rm32: # out: (addr buffered-file), s: (handle stmt-var) 8b/-> *ecx 6/r32/esi # Stmt-var-value # if (operand->register && s->is-deref?) emit "*__" { +$emit-subx-var-as-rm32:check-for-register-indirect: 81 7/subop/compare *(esi+0x10) 0/imm32 # Var-register 74/jump-if-= break/disp8 81 7/subop/compare *(ecx+8) 0/imm32/false # Stmt-var-is-deref @@ -7288,6 +7381,7 @@ $emit-subx-var-as-rm32:register-indirect: } # if (operand->register && !s->is-deref?) emit "%__" { +$emit-subx-var-as-rm32:check-for-register-direct: 81 7/subop/compare *(esi+0x10) 0/imm32 # Var-register 74/jump-if-= break/disp8 81 7/subop/compare *(ecx+8) 0/imm32/false # Stmt-var-is-deref diff --git a/mu_instructions b/mu_instructions index 35f9e141..017527b9 100644 --- a/mu_instructions +++ b/mu_instructions @@ -205,4 +205,14 @@ loop label {.name="loop", .inouts=[label], break {.name="break", .subx-name="e9/jump break/disp32"} break label {.name="break", .inouts=[label], .subx-name="e9/jump", .disp32=inouts[0] ":break"} +Array operations + +var/reg <- length var2/reg2: (addr array T) + {.name="length", .inouts=[reg2], .outputs=[reg1], .subx-name="8b/copy-from", .rm32="*" inouts[0], .r32=outputs[0]} +var/reg <- index arr/rega: (addr array T), idx/regi: int + {.name="index", .inouts=[rega, regi], .outputs=[reg], .subx-name="8d/copy-address", .rm32="*(" inouts[0] "+" inouts[1] "<<2)", .r32=outputs[0]} +var/reg <- index arr/rega: (addr array T), n +compare var, n {.name="compare", .inouts=[var, n], .subx-name="81 7/subop/compare", .rm32="*(ebp+" inouts[0].stack-offset ")", .imm32=inouts[1]} + {.name="index", .inouts=[rega, n], .outputs=[reg], .subx-name="8d/copy-address", .rm32="*(" inouts[0] "+" inouts[1] "<<2)", .r32=outputs[0]} + vim:ft=c:nowrap diff --git a/mu_summary b/mu_summary index 8eafc4e3..3a93d109 100644 --- a/mu_summary +++ b/mu_summary @@ -194,3 +194,9 @@ Similarly, conditional loops: loop-if-addr<= label loop-if-addr>= loop-if-addr>= label + +## Array operations + + var/reg: int <- length var: (addr array T) + var/reg: (addr T) <- index var: (addr array T), idx: int + var/reg: (addr T) <- index var: (addr array T), n