%verify "executed" /* * Signed 64-bit integer multiply. * * We could definately use more free registers for * this code. We spill rINSTw (ebx), * giving us eax, ebc, ecx and edx as computational * temps. On top of that, we'll spill edi (rFP) * for use as the vB pointer and esi (rPC) for use * as the vC pointer. Yuck. */ /* mul-long vAA, vBB, vCC */ movzbl 2(rPC),%eax # eax<- B movzbl 3(rPC),%ecx # ecx<- C SPILL_TMP2(%esi) # save Dalvik PC SPILL(rFP) SPILL(rINST) SPILL(rIBASE) leal (rFP,%eax,4),%esi # esi<- &v[B] leal (rFP,%ecx,4),rFP # rFP<- &v[C] movl 4(%esi),%ecx # ecx<- Bmsw imull (rFP),%ecx # ecx<- (Bmsw*Clsw) movl 4(rFP),%eax # eax<- Cmsw imull (%esi),%eax # eax<- (Cmsw*Blsw) addl %eax,%ecx # ecx<- (Bmsw*Clsw)+(Cmsw*Blsw) movl (rFP),%eax # eax<- Clsw mull (%esi) # eax<- (Clsw*Alsw) UNSPILL(rINST) UNSPILL(rFP) leal (%ecx,rIBASE),rIBASE # full result now in rIBASE:%eax UNSPILL_TMP2(%esi) # Restore Dalvik PC FETCH_INST_OPCODE 2 %ecx # Fetch next instruction movl rIBASE,4(rFP,rINST,4)# v[B+1]<- rIBASE UNSPILL(rIBASE) movl %eax,(rFP,rINST,4) # v[B]<- %eax ADVANCE_PC 2 GOTO_NEXT_R %ecx