1 %default {"routine":"art_quick_ldiv"} 2 /* art_quick_* methods has quick abi, 3 * so use eax, ecx, edx, ebx for args 4 */ 5 /* div/2addr vA, vB */ 6 .extern $routine 7 mov rIBASE, LOCAL0(%esp) # save rIBASE/%edx 8 movzbl rINSTbl, %eax 9 shrl $$4, %eax # eax <- B 10 andb $$0xf, rINSTbl # rINST <- A 11 mov rINST, LOCAL1(%esp) # save rINST/%ebx 12 movl %ebx, %ecx 13 GET_VREG %edx, %eax 14 GET_VREG_HIGH %ebx, %eax 15 movl %edx, %eax 16 orl %ebx, %eax 17 jz common_errDivideByZero 18 GET_VREG %eax, %ecx 19 GET_VREG_HIGH %ecx, %ecx 20 call SYMBOL($routine) 21 mov LOCAL1(%esp), rINST # restore rINST/%ebx 22 SET_VREG_HIGH rIBASE, rINST 23 SET_VREG %eax, rINST 24 mov LOCAL0(%esp), rIBASE # restore rIBASE/%edx 25 ADVANCE_PC_FETCH_AND_GOTO_NEXT 1 26