1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed" 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Signed 64-bit integer multiply, 2-addr version 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We could definately use more free registers for 6a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee * this code. We must spill %edx (rIBASE) because it 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is used by imul. We'll also spill rINST (ebx), 8a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee * giving us eax, ebc, ecx and rIBASE as computational 9f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee * temps. On top of that, we'll spill %esi (edi) 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for use as the vA pointer and rFP (esi) for use 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as the vB pointer. Yuck. 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* mul-long/2addr vA, vB */ 14f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movzbl rINSTbl,%eax # eax<- BA 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project andb $$0xf,%al # eax<- A 16f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee sarl $$4,rINST # rINST<- B 17f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee SPILL_TMP2(%esi) 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SPILL(rFP) 19a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee SPILL(rIBASE) 20f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rFP,%eax,4),%esi # %esi<- &v[A] 21f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee leal (rFP,rINST,4),rFP # rFP<- &v[B] 22f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(%esi),%ecx # ecx<- Amsw 23f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (rFP),%ecx # ecx<- (Amsw*Blsw) 24f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl 4(rFP),%eax # eax<- Bmsw 25f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee imull (%esi),%eax # eax<- (Bmsw*Alsw) 26f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee addl %eax,%ecx # ecx<- (Amsw*Blsw)+(Bmsw*Alsw) 27f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl (rFP),%eax # eax<- Blsw 28f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee mull (%esi) # eax<- (Blsw*Alsw) 29a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee leal (%ecx,rIBASE),rIBASE # full result now in %edx:%eax 30a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee movl rIBASE,4(%esi) # v[A+1]<- rIBASE 31f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee movl %eax,(%esi) # v[A]<- %eax 32f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee UNSPILL_TMP2(%esi) 33f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee FETCH_INST_OPCODE 1 %ecx 34a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee UNSPILL(rIBASE) 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNSPILL(rFP) 36f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 1 37f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee GOTO_NEXT_R %ecx 38