1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed"
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%default {"routine":"__divdi3","special":"$0x80000000"}
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* div/2addr vA, vB */
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    rINST_HI,%eax
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    shrl      $$4,%eax                  # eax<- B
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movzbl    rINST_HI,rINST_FULL
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    andb      $$0xf,rINST_LO            # rINST_FULL<- A
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SPILL(rPC)
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG_WORD(rPC,%eax,0)
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG_WORD(%eax,%eax,1)
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     rPC,OUT_ARG2(%esp)
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl    %eax,%eax
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .L${opcode}_check_zero
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $$-1,%eax
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    je       .L${opcode}_check_neg1
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_notSpecial:
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG_WORD(rPC,rINST_FULL,0)
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG_WORD(%ecx,rINST_FULL,1)
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_notSpecial1:
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .L${opcode}_continue
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%break
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_continue:
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     %eax,OUT_ARG3(%esp)
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     rPC,OUT_ARG0(%esp)
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     %ecx,OUT_ARG1(%esp)
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call     $routine
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_finish:
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     rINST_FULL,%ecx
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG_WORD(rPC,%ecx,1)
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    UNSPILL(rPC)
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    SET_VREG_WORD(%eax,%ecx,0)
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_INST_WORD(1)
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    ADVANCE_PC(1)
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_NEXT
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_check_zero:
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   rPC,rPC
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne     .L${opcode}_notSpecial
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    UNSPILL(rPC)
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp     common_errDivideByZero
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_check_neg1:
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   rPC,%eax
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne     .L${opcode}_notSpecial
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG_WORD(rPC,rINST_FULL,0)
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG_WORD(%ecx,rINST_FULL,1)
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl    rPC,rPC
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .L${opcode}_notSpecial1
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmpl     $$0x80000000,%ecx
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jne      .L${opcode}_notSpecial1
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* minint / -1, return minint on div, 0 on rem */
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    xorl     %eax,%eax
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl     $special,%edx
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    jmp      .L${opcode}_finish
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56