%verify "executed" %default {"routine":"__divdi3","special":"$0x80000000"} /* div/2addr vA, vB */ movzbl rINST_HI,%eax shrl $$4,%eax # eax<- B movzbl rINST_HI,rINST_FULL andb $$0xf,rINST_LO # rINST_FULL<- A SPILL(rPC) GET_VREG_WORD(rPC,%eax,0) GET_VREG_WORD(%eax,%eax,1) movl rPC,OUT_ARG2(%esp) testl %eax,%eax je .L${opcode}_check_zero cmpl $$-1,%eax je .L${opcode}_check_neg1 .L${opcode}_notSpecial: GET_VREG_WORD(rPC,rINST_FULL,0) GET_VREG_WORD(%ecx,rINST_FULL,1) .L${opcode}_notSpecial1: jmp .L${opcode}_continue %break .L${opcode}_continue: movl %eax,OUT_ARG3(%esp) movl rPC,OUT_ARG0(%esp) movl %ecx,OUT_ARG1(%esp) call $routine .L${opcode}_finish: movl rINST_FULL,%ecx SET_VREG_WORD(rPC,%ecx,1) UNSPILL(rPC) SET_VREG_WORD(%eax,%ecx,0) FETCH_INST_WORD(1) ADVANCE_PC(1) GOTO_NEXT .L${opcode}_check_zero: testl rPC,rPC jne .L${opcode}_notSpecial UNSPILL(rPC) jmp common_errDivideByZero .L${opcode}_check_neg1: testl rPC,%eax jne .L${opcode}_notSpecial GET_VREG_WORD(rPC,rINST_FULL,0) GET_VREG_WORD(%ecx,rINST_FULL,1) testl rPC,rPC jne .L${opcode}_notSpecial1 cmpl $$0x80000000,%ecx jne .L${opcode}_notSpecial1 /* minint / -1, return minint on div, 0 on rem */ xorl %eax,%eax movl $special,%edx jmp .L${opcode}_finish