]>
Commit | Line | Data |
---|---|---|
1a49e2aa | 1 | ;***\r |
2 | ;llshr.asm - long shift right\r | |
3 | ;\r | |
4 | ; Copyright (c) Microsoft Corporation. All rights reserved.\r | |
5 | ; SPDX-License-Identifier: BSD-2-Clause-Patent\r | |
6 | ;\r | |
7 | ;Purpose:\r | |
8 | ; define signed long shift right routine\r | |
9 | ; __allshr\r | |
10 | ;\r | |
11 | ;Original Implemenation: MSVC 14.12.25827\r | |
12 | ;\r | |
13 | ;*******************************************************************************\r | |
14 | .686\r | |
15 | .model flat,C\r | |
16 | .code\r | |
17 | \r | |
18 | \r | |
19 | \r | |
20 | ;***\r | |
21 | ;llshr - long shift right\r | |
22 | ;\r | |
23 | ;Purpose:\r | |
24 | ; Does a signed Long Shift Right\r | |
25 | ; Shifts a long right any number of bits.\r | |
26 | ;\r | |
27 | ;Entry:\r | |
28 | ; EDX:EAX - long value to be shifted\r | |
29 | ; CL - number of bits to shift by\r | |
30 | ;\r | |
31 | ;Exit:\r | |
32 | ; EDX:EAX - shifted value\r | |
33 | ;\r | |
34 | ;Uses:\r | |
35 | ; CL is destroyed.\r | |
36 | ;\r | |
37 | ;Exceptions:\r | |
38 | ;\r | |
39 | ;*******************************************************************************\r | |
40 | _allshr PROC NEAR\r | |
41 | \r | |
42 | ;\r | |
43 | ; Handle shifts of 64 bits or more (if shifting 64 bits or more, the result\r | |
44 | ; depends only on the high order bit of edx).\r | |
45 | ;\r | |
46 | cmp cl,64\r | |
47 | jae short RETSIGN\r | |
48 | \r | |
49 | ;\r | |
50 | ; Handle shifts of between 0 and 31 bits\r | |
51 | ;\r | |
52 | cmp cl, 32\r | |
53 | jae short MORE32\r | |
54 | shrd eax,edx,cl\r | |
55 | sar edx,cl\r | |
56 | ret\r | |
57 | \r | |
58 | ;\r | |
59 | ; Handle shifts of between 32 and 63 bits\r | |
60 | ;\r | |
61 | MORE32:\r | |
62 | mov eax,edx\r | |
63 | sar edx,31\r | |
64 | and cl,31\r | |
65 | sar eax,cl\r | |
66 | ret\r | |
67 | \r | |
68 | ;\r | |
69 | ; Return double precision 0 or -1, depending on the sign of edx\r | |
70 | ;\r | |
71 | RETSIGN:\r | |
72 | sar edx,31\r | |
73 | mov eax,edx\r | |
74 | ret\r | |
75 | \r | |
76 | _allshr ENDP\r | |
77 | \r | |
78 | end\r |