%default {"instr1":"","instr2":"","instr3":""} | |
/* | |
* Generic 64-bit unary operation. | |
* Operand in %ecx:%eax | |
* | |
* For: neg-long, not-long | |
*/ | |
/* unop vA, vB */ | |
movzbl rINST_HI,%ecx # ecx<- BA | |
sarl $$4,%ecx # ecx<- B | |
movzbl rINST_HI,rINST_FULL # ecx<- BA | |
andb $$0xf,rINST_LO # rINST_FULL<- A | |
GET_VREG_WORD(%eax,%ecx,0) # eax<- v[B+0] | |
GET_VREG_WORD(%ecx,%ecx,1) # ecx<- v[B+1] | |
$instr1 # ex: negl %eax | |
$instr2 # ex: adcl $$0,%ecx | |
$instr3 # ex: negl %ecx | |
SET_VREG_WORD(%eax,rINST_FULL,0) # v[A+0] <- eax | |
SET_VREG_WORD(%ecx,rINST_FULL,1) # v[A+1] <- ecx | |
GET_INST_WORD(1) | |
ADVANCE_PC(1) | |
GOTO_NEXT |