1a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham /* 2a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * Long integer shift. This is different from the generic 32/64-bit 3a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * binary operations because vAA/vBB are 64-bit but vCC (the shift 4a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * distance) is 32-bit. Also, Dalvik requires us to ignore all but the low 5a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham * 6 bits. 6a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham */ 7a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham /* shl-long vAA:vBB(rARG1:rARG0), vCC(a2) - result in (rRESULT1:rRESULT0) */ 8a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham sll rRESULT0, rARG0, a2 # rlo<- alo << (shift&31) 9a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham not rRESULT1, a2 # rhi<- 31-shift (shift is 5b) 10a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham srl rARG0, 1 11a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham srl rARG0, rRESULT1 # alo<- alo >> (32-(shift&31)) 12a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham sll rRESULT1, rARG1, a2 # rhi<- ahi << (shift&31) 13a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham or rRESULT1, rARG0 # rhi<- rhi | alo 14a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham andi a2, 0x20 # shift< shift & 0x20 15a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham movn rRESULT1, rRESULT0, a2 # rhi<- rlo (if shift&0x20) 16a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham movn rRESULT0, zero, a2 # rlo<- 0 (if shift&0x20) 17a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham RETURN 18