1%default {"result":"","second":"","wide":"","suffix":"","rem":"0","ext":"cdq"} 2/* 3 * 32-bit binary div/rem operation. Handles special case of op1=-1. 4 */ 5 /* div/rem vAA, vBB, vCC */ 6 movzbq 2(rPC), %rax # rax <- BB 7 movzbq 3(rPC), %rcx # rcx <- CC 8 .if $wide 9 GET_WIDE_VREG %rax, %rax # eax <- vBB 10 GET_WIDE_VREG $second, %rcx # ecx <- vCC 11 .else 12 GET_VREG %eax, %rax # eax <- vBB 13 GET_VREG $second, %rcx # ecx <- vCC 14 .endif 15 test${suffix} $second, $second 16 jz common_errDivideByZero 17 cmp${suffix} $$-1, $second 18 je 2f 19 $ext # rdx:rax <- sign-extended of rax 20 idiv${suffix} $second 211: 22 .if $wide 23 SET_WIDE_VREG $result, rINSTq # eax <- vBB 24 .else 25 SET_VREG $result, rINSTq # eax <- vBB 26 .endif 27 ADVANCE_PC_FETCH_AND_GOTO_NEXT 2 282: 29 .if $rem 30 xor${suffix} $result, $result 31 .else 32 neg${suffix} $result 33 .endif 34 jmp 1b 35