| /* |
| * Long integer shift, 2addr version. vA is 64-bit value/result, vB is |
| * 32-bit shift distance. |
| */ |
| /* shl-long/2addr vA, vB */ |
| /* ecx gets shift count */ |
| /* Need to spill rIBASE */ |
| /* rINSTw gets AA */ |
| movzbl rINSTbl, %ecx # ecx <- BA |
| andb $$0xf, rINSTbl # rINST <- A |
| GET_VREG %eax, rINST # eax <- v[AA+0] |
| sarl $$4, %ecx # ecx <- B |
| movl rIBASE, LOCAL0(%esp) |
| GET_VREG_HIGH rIBASE, rINST # rIBASE <- v[AA+1] |
| GET_VREG %ecx, %ecx # ecx <- vBB |
| shrdl rIBASE, %eax |
| sarl %cl, rIBASE |
| testb $$32, %cl |
| je 2f |
| movl rIBASE, %eax |
| sarl $$31, rIBASE |
| 2: |
| SET_VREG_HIGH rIBASE, rINST # v[AA+1] <- rIBASE |
| movl LOCAL0(%esp), rIBASE |
| SET_VREG %eax, rINST # v[AA+0] <- eax |
| ADVANCE_PC_FETCH_AND_GOTO_NEXT 1 |