1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%default {"result":"","special":""}
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * 32-bit binary div/rem operation.  Handles special case of op0=minint and
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * op1=-1.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/rem/2addr vA, vB */
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzx    rINST_HI,%ecx          # eax<- BA
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    sarl     $$4,%ecx               # ecx<- B
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(%ecx,%ecx)             # eax<- vBB
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl   rINST_HI,rINST_FULL    # rINST_FULL<- BA
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb     $$0xf,rINST_LO         # rINST_FULL<- A
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(%eax,rINST_FULL)       # eax<- vBB
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SPILL(rPC)
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $$0,%ecx
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       common_errDivideByZero
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $$-1,%ecx
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .L${opcode}_continue_div2addr
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $$0x80000000,%eax
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .L${opcode}_continue_div2addr
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $special,$result
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .L${opcode}_finish_div2addr
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%break
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_continue_div2addr:
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cltd
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    idivl   %ecx
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_finish_div2addr:
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG($result,rINST_FULL)
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    UNSPILL(rPC)
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_INST_WORD(1)
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ADVANCE_PC(1)
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
33