|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Copyright (c) 1992 NeXT Computer, Inc.
24: *
25: * Byte ordering conversion (for i386).
26: *
27: * HISTORY
28: *
29: * 8 October 1992 ? at NeXT
30: * Converted to NXxxx versions. Condensed history.
31: *
32: * 18 May 1992 ? at NeXT
33: * Created.
34: */
35:
36: static __inline__
37: unsigned short
38: NXSwapShort(
39: unsigned short inv
40: )
41: {
42: register unsigned short value = inv;
43:
44: __asm__ volatile( "xchgb %h1, %b1" : "=q" (value) : "0" (value));
45:
46: return (value);
47: }
48:
49: static __inline__
50: unsigned long
51: NXSwapInt(
52: unsigned long inv
53: )
54: {
55: register unsigned int outv = inv;
56:
57: __asm__ volatile( "bswap %0" : "=r" (outv) : "0" (outv));
58:
59: return (outv);
60: }
61:
62: static __inline__
63: unsigned long
64: NXSwapLong(
65: unsigned long inv
66: )
67: {
68: unsigned long outv;
69:
70: __asm__ volatile(
71: "bswap %0"
72:
73: : "=r" (outv)
74: : "0" (inv));
75:
76: return (outv);
77: }
78:
79: static __inline__
80: unsigned long long
81: NXSwapLongLong(
82: unsigned long long inv
83: )
84: {
85: union llconv {
86: unsigned long long ull;
87: unsigned long ul[2];
88: } *inp, outv;
89:
90: inp = (union llconv *)&inv;
91:
92: outv.ul[0] = NXSwapLong(inp->ul[1]);
93: outv.ul[1] = NXSwapLong(inp->ul[0]);
94:
95: return (outv.ull);
96: }
97:
98: static __inline__ NXSwappedFloat
99: NXConvertHostFloatToSwapped(float x)
100: {
101: union fconv {
102: float number;
103: NXSwappedFloat sf;
104: };
105: return ((union fconv *)&x)->sf;
106: }
107:
108: static __inline__ float
109: NXConvertSwappedFloatToHost(NXSwappedFloat x)
110: {
111: union fconv {
112: float number;
113: NXSwappedFloat sf;
114: };
115: return ((union fconv *)&x)->number;
116: }
117:
118: static __inline__ NXSwappedDouble
119: NXConvertHostDoubleToSwapped(double x)
120: {
121: union dconv {
122: double number;
123: NXSwappedDouble sd;
124: };
125: return ((union dconv *)&x)->sd;
126: }
127:
128: static __inline__ double
129: NXConvertSwappedDoubleToHost(NXSwappedDouble x)
130: {
131: union dconv {
132: double number;
133: NXSwappedDouble sd;
134: };
135: return ((union dconv *)&x)->number;
136: }
137:
138: static __inline__ NXSwappedFloat
139: NXSwapFloat(NXSwappedFloat x)
140: {
141: return NXSwapLong(x);
142: }
143:
144: static __inline__ NXSwappedDouble
145: NXSwapDouble(NXSwappedDouble x)
146: {
147: return NXSwapLongLong(x);
148: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.