From: David Given Date: Sat, 15 Oct 2016 09:22:40 +0000 (+0200) Subject: Some more opcodes. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=b2ddf124732f9595d3a79d3bf408d4e724135d19;p=ack.git Some more opcodes. --- diff --git a/mach/proto/mcg/treebuilder.c b/mach/proto/mcg/treebuilder.c index 4060b206f..c2083b8ab 100644 --- a/mach/proto/mcg/treebuilder.c +++ b/mach/proto/mcg/treebuilder.c @@ -504,6 +504,23 @@ static void insn_ivalue(int opcode, arith value) ); break; + case op_lof: + { + struct ir* ptr = pop(EM_pointersize); + + push( + new_ir1( + IR_LOAD, EM_wordsize, + new_ir2( + IR_ADD, EM_pointersize, + ptr, + new_wordir(value) + ) + ) + ); + break; + } + case op_sti: { struct ir* ptr = pop(EM_pointersize); @@ -518,6 +535,25 @@ static void insn_ivalue(int opcode, arith value) break; } + case op_stf: + { + struct ir* ptr = pop(EM_pointersize); + struct ir* val = pop(value); + + appendir( + new_ir2( + IR_STORE, EM_wordsize, + new_ir2( + IR_ADD, EM_pointersize, + ptr, + new_wordir(value) + ), + val + ) + ); + break; + } + case op_cmi: push( tristate_compare(value, IR_COMPARES)