@@ -345,6 +345,13 @@ func init() {
345
345
{name : "MOVWstore" , argLength : 3 , reg : gpstore , asm : "MOVW" , aux : "SymOff" , typ : "Mem" , faultOnNilArg0 : true , symEffect : "Write" }, // store 2 bytes in arg1 to arg0+auxint+aux. arg2=mem
346
346
{name : "MOVLstore" , argLength : 3 , reg : gpstore , asm : "MOVL" , aux : "SymOff" , typ : "Mem" , faultOnNilArg0 : true , symEffect : "Write" }, // store 4 bytes in arg1 to arg0+auxint+aux. arg2=mem
347
347
348
+ // direct binary-op on memory (read-modify-write)
349
+ {name : "ADDLmodify" , argLength : 3 , reg : gpstore , asm : "ADDL" , aux : "SymOff" , typ : "Mem" , faultOnNilArg0 : true , symEffect : "Write" }, // *(arg0+auxint+aux) += arg1, arg2=mem
350
+ {name : "SUBLmodify" , argLength : 3 , reg : gpstore , asm : "SUBL" , aux : "SymOff" , typ : "Mem" , faultOnNilArg0 : true , symEffect : "Write" }, // *(arg0+auxint+aux) -= arg1, arg2=mem
351
+ {name : "ANDLmodify" , argLength : 3 , reg : gpstore , asm : "ANDL" , aux : "SymOff" , typ : "Mem" , faultOnNilArg0 : true , symEffect : "Write" }, // *(arg0+auxint+aux) &= arg1, arg2=mem
352
+ {name : "ORLmodify" , argLength : 3 , reg : gpstore , asm : "ORL" , aux : "SymOff" , typ : "Mem" , faultOnNilArg0 : true , symEffect : "Write" }, // *(arg0+auxint+aux) |= arg1, arg2=mem
353
+ {name : "XORLmodify" , argLength : 3 , reg : gpstore , asm : "XORL" , aux : "SymOff" , typ : "Mem" , faultOnNilArg0 : true , symEffect : "Write" }, // *(arg0+auxint+aux) ^= arg1, arg2=mem
354
+
348
355
// indexed loads/stores
349
356
{name : "MOVBloadidx1" , argLength : 3 , reg : gploadidx , commutative : true , asm : "MOVBLZX" , aux : "SymOff" , symEffect : "Read" }, // load a byte from arg0+arg1+auxint+aux. arg2=mem
350
357
{name : "MOVWloadidx1" , argLength : 3 , reg : gploadidx , commutative : true , asm : "MOVWLZX" , aux : "SymOff" , symEffect : "Read" }, // load 2 bytes from arg0+arg1+auxint+aux. arg2=mem
0 commit comments