1/* 2 * Long integer shift, 2addr version. vA is 64-bit value/result, vB is 3 * 32-bit shift distance. 4 */ 5 /* shl-long/2addr vA, vB */ 6 /* ecx gets shift count */ 7 /* Need to spill rIBASE */ 8 /* rINSTw gets AA */ 9 movzbl rINSTbl, %ecx # ecx <- BA 10 andb $$0xf, rINSTbl # rINST <- A 11 GET_VREG %eax, rINST # eax <- v[AA+0] 12 sarl $$4, %ecx # ecx <- B 13 movl rIBASE, LOCAL0(%esp) 14 GET_VREG_HIGH rIBASE, rINST # rIBASE <- v[AA+1] 15 GET_VREG %ecx, %ecx # ecx <- vBB 16 shrdl rIBASE, %eax 17 shrl %cl, rIBASE 18 testb $$32, %cl 19 je 2f 20 movl rIBASE, %eax 21 xorl rIBASE, rIBASE 222: 23 SET_VREG_HIGH rIBASE, rINST # v[AA+1] <- rIBASE 24 movl LOCAL0(%esp), rIBASE 25 SET_VREG %eax, rINST # v[AA+0] <- eax 26 ADVANCE_PC_FETCH_AND_GOTO_NEXT 1 27