SPL to HP C/XL Migration Guide (30231-90001)

5-13
Table 5-15. SPL 16-Bit Shift Operators
-------------------------------------------------------------------------------------------
| |
| shift-op Operation |
-------------------------------------------------------------------------------------------
| |
| LSL logical shift left (sign not retained) |
| |
| LSR logical shift right (no sign extension) |
| |
| ASL arithmetic shift left (sign retained) |
| |
| ASR arithmetic shift right (sign extended) |
| |
| CSL circular shift left (rotate 16 bits left) |
| |
| CSR circular shift right (rotate 16 bits right) |
| |
-------------------------------------------------------------------------------------------
These operations may be performed in HP C/XL by the following #define
macro directives and function declarations. X represents the
operand
;C
represents the
count
.
______________________________________________________________________________
| |
| #define LSL(X,C) ((unsigned short int)((unsigned short int)(X) << (C)))|
______________________________________________________________________________
Figure 5-6. HP C/XL LSL Directive: Bit Shift Operation
______________________________________________________________________________
| |
| #define LSR(X,C) ((unsigned short int)((unsigned short int)(X) >> (C)))|
______________________________________________________________________________
Figure 5-7. HP C/XL LSR Directive: Bit Shift Operation
_______________________________________________________________________
| |
| #define ASL(X,C) ((short int)(((short int)(X) & 0x8000) \ |
| | ((short int)(X) << (C)) & 0x7FFF))|
_______________________________________________________________________
Figure 5-8. HP C/XL ASL Directive: Bit Shift Operation
____________________________________________________________
| |
| #define ASR(X,C) ((short int)((short int)(X) >> (C)))|
____________________________________________________________
Figure 5-9. HP C/XL ASR Directive: Bit Shift Operation
__________________________________________________________________________
| |
| unsigned short int CSL(X,C) |
| unsigned short int X; |
| int C; |
| { |
| for (;;--C) /*infinite loop, decrementing C after each iteration*/|
| { |
| if (C == 0) return(X); /*exit, returning X*/ |
| X = ((X & 0x8000) >> 15) | X << 1; |
| } |
| } |
__________________________________________________________________________