diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-02-27 16:58:16 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-02-27 17:03:00 -0800 |
commit | 8b85a07f977f374d8d76831c1cb9c93796772094 (patch) | |
tree | 221766aaf51814d12572015d3619a957e8badb53 | |
parent | a9151143f3d7c276e3c87b79b00378d509942d33 (diff) | |
download | mu-8b85a07f977f374d8d76831c1cb9c93796772094.tar.gz |
6059
-rw-r--r-- | mu_instructions | 8 | ||||
-rw-r--r-- | mu_summary | 5 |
2 files changed, 13 insertions, 0 deletions
diff --git a/mu_instructions b/mu_instructions index 017527b9..941401dc 100644 --- a/mu_instructions +++ b/mu_instructions @@ -215,4 +215,12 @@ 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]} +User-defined types + +If a record (product) type T was defined to have elements a, b, c, ... of +types T_a, T_b, T_c, ..., then accessing one of those elements f of type T_f: + +var/reg: (addr T_f) <- get var2/reg2: (addr F), f: field name => 8d/copy-addr *(reg2+offset(f)) + {.name="get", .inouts=[reg2, f], .subx-name="8d/copy-addr", .rm32="*(" inouts[0] "+" offset(f) ")", .r32=outputs[0]} + vim:ft=c:nowrap diff --git a/mu_summary b/mu_summary index 3a93d109..179aa11f 100644 --- a/mu_summary +++ b/mu_summary @@ -200,3 +200,8 @@ Similarly, conditional loops: 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 + +## User-defined types + + var/reg: (addr T_f) <- get var: (addr T), f + where record (product) type T has elements a, b, c, ... of types T_a, T_b, T_c, ... |