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