|
25 | 25 | #ifndef OS_CPU_WINDOWS_X86_BYTES_WINDOWS_X86_INLINE_HPP
|
26 | 26 | #define OS_CPU_WINDOWS_X86_BYTES_WINDOWS_X86_INLINE_HPP
|
27 | 27 |
|
28 |
| -#pragma warning(disable: 4035) // Disable warning 4035: no return value |
| 28 | +#include <stdlib.h> |
29 | 29 |
|
30 | 30 | // Efficient swapping of data bytes from Java byte
|
31 | 31 | // ordering to native byte ordering and vice versa.
|
32 | 32 | inline u2 Bytes::swap_u2(u2 x) {
|
33 |
| -#ifdef AMD64 |
34 |
| - address p = (address) &x; |
35 |
| - return ( (u2(p[0]) << 8 ) | ( u2(p[1])) ); |
36 |
| -#else |
37 |
| - __asm { |
38 |
| - mov ax, x |
39 |
| - xchg al, ah |
40 |
| - } |
41 |
| - // no return statement needed, result is already in ax |
42 |
| - // compiler warning C4035 disabled via warning pragma |
43 |
| -#endif // AMD64 |
| 33 | + return (u2) _byteswap_ushort((unsigned short) x); |
44 | 34 | }
|
45 | 35 |
|
46 | 36 | inline u4 Bytes::swap_u4(u4 x) {
|
47 |
| -#ifdef AMD64 |
48 |
| - address p = (address) &x; |
49 |
| - return ( (u4(p[0]) << 24) | (u4(p[1]) << 16) | (u4(p[2]) << 8) | u4(p[3])) ; |
50 |
| -#else |
51 |
| - __asm { |
52 |
| - mov eax, x |
53 |
| - bswap eax |
54 |
| - } |
55 |
| - // no return statement needed, result is already in eax |
56 |
| - // compiler warning C4035 disabled via warning pragma |
57 |
| -#endif // AMD64 |
| 37 | + return (u4) _byteswap_ulong((unsigned long) x); |
58 | 38 | }
|
59 | 39 |
|
60 |
| -#ifdef AMD64 |
61 | 40 | inline u8 Bytes::swap_u8(u8 x) {
|
62 |
| - address p = (address) &x; |
63 |
| - return ( (u8(p[0]) << 56) | (u8(p[1]) << 48) | (u8(p[2]) << 40) | (u8(p[3]) << 32) | |
64 |
| - (u8(p[4]) << 24) | (u8(p[5]) << 16) | (u8(p[6]) << 8) | u8(p[7])) ; |
| 41 | + return (u8) _byteswap_uint64((unsigned __int64) x); |
65 | 42 | }
|
66 | 43 |
|
67 |
| -#else |
68 |
| -// Helper function for swap_u8 |
69 |
| -inline u8 Bytes::swap_u8_base(u4 x, u4 y) { |
70 |
| - __asm { |
71 |
| - mov eax, y |
72 |
| - mov edx, x |
73 |
| - bswap eax |
74 |
| - bswap edx |
75 |
| - } |
76 |
| - // no return statement needed, result is already in edx:eax |
77 |
| - // compiler warning C4035 disabled via warning pragma |
78 |
| -} |
79 |
| - |
80 |
| -inline u8 Bytes::swap_u8(u8 x) { |
81 |
| - return swap_u8_base(*(u4*)&x, *(((u4*)&x)+1)); |
82 |
| -} |
83 |
| -#endif // AMD64 |
84 |
| - |
85 |
| -#pragma warning(default: 4035) // Enable warning 4035: no return value |
86 |
| - |
87 | 44 | #endif // OS_CPU_WINDOWS_X86_BYTES_WINDOWS_X86_INLINE_HPP
|
0 commit comments