1/*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23#ifndef RLD
24#include <string.h>
25#import <mach-o/m88k/swap.h>
26#import <architecture/nrw/reg_help.h>
27
28void
29swap_m88k_thread_state_grf_t(
30m88k_thread_state_grf_t *cpu,
31enum NXByteOrder target_byte_sex)
32{
33	cpu->r1 = OSSwapInt32(cpu->r1);
34	cpu->r2 = OSSwapInt32(cpu->r2);
35	cpu->r3 = OSSwapInt32(cpu->r3);
36	cpu->r4 = OSSwapInt32(cpu->r4);
37	cpu->r5 = OSSwapInt32(cpu->r5);
38	cpu->r6 = OSSwapInt32(cpu->r6);
39	cpu->r7 = OSSwapInt32(cpu->r7);
40	cpu->r8 = OSSwapInt32(cpu->r8);
41	cpu->r9 = OSSwapInt32(cpu->r9);
42	cpu->r10 = OSSwapInt32(cpu->r10);
43	cpu->r11 = OSSwapInt32(cpu->r11);
44	cpu->r12 = OSSwapInt32(cpu->r12);
45	cpu->r13 = OSSwapInt32(cpu->r13);
46	cpu->r14 = OSSwapInt32(cpu->r14);
47	cpu->r15 = OSSwapInt32(cpu->r15);
48	cpu->r16 = OSSwapInt32(cpu->r16);
49	cpu->r17 = OSSwapInt32(cpu->r17);
50	cpu->r18 = OSSwapInt32(cpu->r18);
51	cpu->r19 = OSSwapInt32(cpu->r19);
52	cpu->r20 = OSSwapInt32(cpu->r20);
53	cpu->r21 = OSSwapInt32(cpu->r21);
54	cpu->r22 = OSSwapInt32(cpu->r22);
55	cpu->r23 = OSSwapInt32(cpu->r23);
56	cpu->r24 = OSSwapInt32(cpu->r24);
57	cpu->r25 = OSSwapInt32(cpu->r25);
58	cpu->r26 = OSSwapInt32(cpu->r26);
59	cpu->r27 = OSSwapInt32(cpu->r27);
60	cpu->r28 = OSSwapInt32(cpu->r28);
61	cpu->r29 = OSSwapInt32(cpu->r29);
62	cpu->r30 = OSSwapInt32(cpu->r30);
63	cpu->r31 = OSSwapInt32(cpu->r31);
64	cpu->xip = OSSwapInt32(cpu->xip);
65	cpu->xip_in_bd = OSSwapInt32(cpu->xip_in_bd);
66	cpu->nip = OSSwapInt32(cpu->nip);
67}
68
69void
70swap_m88k_thread_state_xrf_t(
71m88k_thread_state_xrf_t *fpu,
72enum NXByteOrder target_byte_sex)
73{
74    enum NXByteOrder host_byte_sex;
75
76    struct swapped_m88k_fpsr {
77	union {
78	    struct {
79		unsigned	afinx:BIT_WIDTH(0);
80		unsigned	afovf:BIT_WIDTH(1);
81		unsigned	afunf:BIT_WIDTH(2);
82		unsigned	afdvz:BIT_WIDTH(3);
83		unsigned	afinv:BIT_WIDTH(4);
84		unsigned	:BITS_WIDTH(15,5);
85		unsigned	xmod:BIT_WIDTH(16);
86		unsigned	:BITS_WIDTH(31,17);
87	    } fields;
88	    uint32_t word;
89	} u;
90    } ssr;
91    struct swapped_m88k_fpcr {
92	union {
93	    struct {
94		unsigned	efinx:BIT_WIDTH(0);
95		unsigned	efovf:BIT_WIDTH(1);
96		unsigned	efunf:BIT_WIDTH(2);
97		unsigned	efdvz:BIT_WIDTH(3);
98		unsigned	efinv:BIT_WIDTH(4);
99		unsigned	:BITS_WIDTH(13,5);
100		m88k_fpcr_rm_t	rm:BITS_WIDTH(15,14);
101		unsigned	:BITS_WIDTH(31,16);
102	    } fields;
103	    uint32_t word;
104	} u;
105    } scr;
106
107	host_byte_sex = NXHostByteOrder();
108
109	fpu->x1.x[0] = OSSwapInt32(fpu->x1.x[0]);
110	fpu->x1.x[1] = OSSwapInt32(fpu->x1.x[1]);
111	fpu->x1.x[2] = OSSwapInt32(fpu->x1.x[2]);
112	fpu->x1.x[3] = OSSwapInt32(fpu->x1.x[3]);
113	fpu->x2.x[0] = OSSwapInt32(fpu->x2.x[0]);
114	fpu->x2.x[1] = OSSwapInt32(fpu->x2.x[1]);
115	fpu->x2.x[2] = OSSwapInt32(fpu->x2.x[2]);
116	fpu->x2.x[3] = OSSwapInt32(fpu->x2.x[3]);
117	fpu->x3.x[0] = OSSwapInt32(fpu->x3.x[0]);
118	fpu->x3.x[1] = OSSwapInt32(fpu->x3.x[1]);
119	fpu->x3.x[2] = OSSwapInt32(fpu->x3.x[2]);
120	fpu->x3.x[3] = OSSwapInt32(fpu->x3.x[3]);
121	fpu->x4.x[0] = OSSwapInt32(fpu->x4.x[0]);
122	fpu->x4.x[1] = OSSwapInt32(fpu->x4.x[1]);
123	fpu->x4.x[2] = OSSwapInt32(fpu->x4.x[2]);
124	fpu->x4.x[3] = OSSwapInt32(fpu->x4.x[3]);
125	fpu->x5.x[0] = OSSwapInt32(fpu->x5.x[0]);
126	fpu->x5.x[1] = OSSwapInt32(fpu->x5.x[1]);
127	fpu->x5.x[2] = OSSwapInt32(fpu->x5.x[2]);
128	fpu->x5.x[3] = OSSwapInt32(fpu->x5.x[3]);
129	fpu->x6.x[0] = OSSwapInt32(fpu->x6.x[0]);
130	fpu->x6.x[1] = OSSwapInt32(fpu->x6.x[1]);
131	fpu->x6.x[2] = OSSwapInt32(fpu->x6.x[2]);
132	fpu->x6.x[3] = OSSwapInt32(fpu->x6.x[3]);
133	fpu->x7.x[0] = OSSwapInt32(fpu->x7.x[0]);
134	fpu->x7.x[1] = OSSwapInt32(fpu->x7.x[1]);
135	fpu->x7.x[2] = OSSwapInt32(fpu->x7.x[2]);
136	fpu->x7.x[3] = OSSwapInt32(fpu->x7.x[3]);
137	fpu->x8.x[0] = OSSwapInt32(fpu->x8.x[0]);
138	fpu->x8.x[1] = OSSwapInt32(fpu->x8.x[1]);
139	fpu->x8.x[2] = OSSwapInt32(fpu->x8.x[2]);
140	fpu->x8.x[3] = OSSwapInt32(fpu->x8.x[3]);
141	fpu->x9.x[0] = OSSwapInt32(fpu->x9.x[0]);
142	fpu->x9.x[1] = OSSwapInt32(fpu->x9.x[1]);
143	fpu->x9.x[2] = OSSwapInt32(fpu->x9.x[2]);
144	fpu->x9.x[3] = OSSwapInt32(fpu->x9.x[3]);
145	fpu->x10.x[0] = OSSwapInt32(fpu->x10.x[0]);
146	fpu->x10.x[1] = OSSwapInt32(fpu->x10.x[1]);
147	fpu->x10.x[2] = OSSwapInt32(fpu->x10.x[2]);
148	fpu->x10.x[3] = OSSwapInt32(fpu->x10.x[3]);
149	fpu->x11.x[0] = OSSwapInt32(fpu->x11.x[0]);
150	fpu->x11.x[1] = OSSwapInt32(fpu->x11.x[1]);
151	fpu->x11.x[2] = OSSwapInt32(fpu->x11.x[2]);
152	fpu->x11.x[3] = OSSwapInt32(fpu->x11.x[3]);
153	fpu->x12.x[0] = OSSwapInt32(fpu->x12.x[0]);
154	fpu->x12.x[1] = OSSwapInt32(fpu->x12.x[1]);
155	fpu->x12.x[2] = OSSwapInt32(fpu->x12.x[2]);
156	fpu->x12.x[3] = OSSwapInt32(fpu->x12.x[3]);
157	fpu->x13.x[0] = OSSwapInt32(fpu->x13.x[0]);
158	fpu->x13.x[1] = OSSwapInt32(fpu->x13.x[1]);
159	fpu->x13.x[2] = OSSwapInt32(fpu->x13.x[2]);
160	fpu->x13.x[3] = OSSwapInt32(fpu->x13.x[3]);
161	fpu->x14.x[0] = OSSwapInt32(fpu->x14.x[0]);
162	fpu->x14.x[1] = OSSwapInt32(fpu->x14.x[1]);
163	fpu->x14.x[2] = OSSwapInt32(fpu->x14.x[2]);
164	fpu->x14.x[3] = OSSwapInt32(fpu->x14.x[3]);
165	fpu->x15.x[0] = OSSwapInt32(fpu->x15.x[0]);
166	fpu->x15.x[1] = OSSwapInt32(fpu->x15.x[1]);
167	fpu->x15.x[2] = OSSwapInt32(fpu->x15.x[2]);
168	fpu->x15.x[3] = OSSwapInt32(fpu->x15.x[3]);
169	fpu->x16.x[0] = OSSwapInt32(fpu->x16.x[0]);
170	fpu->x16.x[1] = OSSwapInt32(fpu->x16.x[1]);
171	fpu->x16.x[2] = OSSwapInt32(fpu->x16.x[2]);
172	fpu->x16.x[3] = OSSwapInt32(fpu->x16.x[3]);
173	fpu->x17.x[0] = OSSwapInt32(fpu->x17.x[0]);
174	fpu->x17.x[1] = OSSwapInt32(fpu->x17.x[1]);
175	fpu->x17.x[2] = OSSwapInt32(fpu->x17.x[2]);
176	fpu->x17.x[3] = OSSwapInt32(fpu->x17.x[3]);
177	fpu->x18.x[0] = OSSwapInt32(fpu->x18.x[0]);
178	fpu->x18.x[1] = OSSwapInt32(fpu->x18.x[1]);
179	fpu->x18.x[2] = OSSwapInt32(fpu->x18.x[2]);
180	fpu->x18.x[3] = OSSwapInt32(fpu->x18.x[3]);
181	fpu->x19.x[0] = OSSwapInt32(fpu->x19.x[0]);
182	fpu->x19.x[1] = OSSwapInt32(fpu->x19.x[1]);
183	fpu->x19.x[2] = OSSwapInt32(fpu->x19.x[2]);
184	fpu->x19.x[3] = OSSwapInt32(fpu->x19.x[3]);
185	fpu->x20.x[0] = OSSwapInt32(fpu->x20.x[0]);
186	fpu->x20.x[1] = OSSwapInt32(fpu->x20.x[1]);
187	fpu->x20.x[2] = OSSwapInt32(fpu->x20.x[2]);
188	fpu->x20.x[3] = OSSwapInt32(fpu->x20.x[3]);
189	fpu->x21.x[0] = OSSwapInt32(fpu->x21.x[0]);
190	fpu->x21.x[1] = OSSwapInt32(fpu->x21.x[1]);
191	fpu->x21.x[2] = OSSwapInt32(fpu->x21.x[2]);
192	fpu->x21.x[3] = OSSwapInt32(fpu->x21.x[3]);
193	fpu->x22.x[0] = OSSwapInt32(fpu->x22.x[0]);
194	fpu->x22.x[1] = OSSwapInt32(fpu->x22.x[1]);
195	fpu->x22.x[2] = OSSwapInt32(fpu->x22.x[2]);
196	fpu->x22.x[3] = OSSwapInt32(fpu->x22.x[3]);
197	fpu->x23.x[0] = OSSwapInt32(fpu->x23.x[0]);
198	fpu->x23.x[1] = OSSwapInt32(fpu->x23.x[1]);
199	fpu->x23.x[2] = OSSwapInt32(fpu->x23.x[2]);
200	fpu->x23.x[3] = OSSwapInt32(fpu->x23.x[3]);
201	fpu->x24.x[0] = OSSwapInt32(fpu->x24.x[0]);
202	fpu->x24.x[1] = OSSwapInt32(fpu->x24.x[1]);
203	fpu->x24.x[2] = OSSwapInt32(fpu->x24.x[2]);
204	fpu->x24.x[3] = OSSwapInt32(fpu->x24.x[3]);
205	fpu->x25.x[0] = OSSwapInt32(fpu->x25.x[0]);
206	fpu->x25.x[1] = OSSwapInt32(fpu->x25.x[1]);
207	fpu->x25.x[2] = OSSwapInt32(fpu->x25.x[2]);
208	fpu->x25.x[3] = OSSwapInt32(fpu->x25.x[3]);
209	fpu->x26.x[0] = OSSwapInt32(fpu->x26.x[0]);
210	fpu->x26.x[1] = OSSwapInt32(fpu->x26.x[1]);
211	fpu->x26.x[2] = OSSwapInt32(fpu->x26.x[2]);
212	fpu->x26.x[3] = OSSwapInt32(fpu->x26.x[3]);
213	fpu->x27.x[0] = OSSwapInt32(fpu->x27.x[0]);
214	fpu->x27.x[1] = OSSwapInt32(fpu->x27.x[1]);
215	fpu->x27.x[2] = OSSwapInt32(fpu->x27.x[2]);
216	fpu->x27.x[3] = OSSwapInt32(fpu->x27.x[3]);
217	fpu->x28.x[0] = OSSwapInt32(fpu->x28.x[0]);
218	fpu->x28.x[1] = OSSwapInt32(fpu->x28.x[1]);
219	fpu->x28.x[2] = OSSwapInt32(fpu->x28.x[2]);
220	fpu->x28.x[3] = OSSwapInt32(fpu->x28.x[3]);
221	fpu->x29.x[0] = OSSwapInt32(fpu->x29.x[0]);
222	fpu->x29.x[1] = OSSwapInt32(fpu->x29.x[1]);
223	fpu->x29.x[2] = OSSwapInt32(fpu->x29.x[2]);
224	fpu->x29.x[3] = OSSwapInt32(fpu->x29.x[3]);
225	fpu->x30.x[0] = OSSwapInt32(fpu->x30.x[0]);
226	fpu->x30.x[1] = OSSwapInt32(fpu->x30.x[1]);
227	fpu->x30.x[2] = OSSwapInt32(fpu->x30.x[2]);
228	fpu->x30.x[3] = OSSwapInt32(fpu->x30.x[3]);
229	fpu->x31.x[0] = OSSwapInt32(fpu->x31.x[0]);
230	fpu->x31.x[1] = OSSwapInt32(fpu->x31.x[1]);
231	fpu->x31.x[2] = OSSwapInt32(fpu->x31.x[2]);
232	fpu->x31.x[3] = OSSwapInt32(fpu->x31.x[3]);
233
234	if(target_byte_sex == host_byte_sex){
235	    memcpy(&ssr, &(fpu->fpsr), sizeof(struct swapped_m88k_fpsr));
236	    ssr.u.word = OSSwapInt32(ssr.u.word);
237	    fpu->fpsr.afinx = ssr.u.fields.afinx;
238	    fpu->fpsr.afovf = ssr.u.fields.afovf;
239	    fpu->fpsr.afunf = ssr.u.fields.afunf;
240	    fpu->fpsr.afdvz = ssr.u.fields.afdvz;
241	    fpu->fpsr.afinv = ssr.u.fields.afinv;
242	    fpu->fpsr.xmod = ssr.u.fields.xmod;
243
244	    memcpy(&scr, &(fpu->fpcr), sizeof(struct swapped_m88k_fpcr));
245	    scr.u.word = OSSwapInt32(scr.u.word);
246	    fpu->fpcr.efinx = scr.u.fields.efinx;
247	    fpu->fpcr.efovf = scr.u.fields.efovf;
248	    fpu->fpcr.efunf = scr.u.fields.efunf;
249	    fpu->fpcr.efdvz = scr.u.fields.efdvz;
250	    fpu->fpcr.efinv = scr.u.fields.efinv;
251	    fpu->fpcr.rm = scr.u.fields.rm;
252	}
253	else{
254	    ssr.u.fields.afinx = fpu->fpsr.afinx;
255	    ssr.u.fields.afovf = fpu->fpsr.afovf;
256	    ssr.u.fields.afunf = fpu->fpsr.afunf;
257	    ssr.u.fields.afdvz = fpu->fpsr.afdvz;
258	    ssr.u.fields.afinv = fpu->fpsr.afinv;
259	    ssr.u.fields.xmod = fpu->fpsr.xmod;
260	    ssr.u.word = OSSwapInt32(ssr.u.word);
261	    memcpy(&(fpu->fpsr), &ssr, sizeof(struct swapped_m88k_fpsr));
262
263	    scr.u.fields.efinx = fpu->fpcr.efinx;
264	    scr.u.fields.efovf = fpu->fpcr.efovf;
265	    scr.u.fields.efunf = fpu->fpcr.efunf;
266	    scr.u.fields.efdvz = fpu->fpcr.efdvz;
267	    scr.u.fields.efinv = fpu->fpcr.efinv;
268	    scr.u.fields.rm = fpu->fpcr.rm;
269	    scr.u.word = OSSwapInt32(scr.u.word);
270	    memcpy(&(fpu->fpcr), &scr, sizeof(struct swapped_m88k_fpcr));
271	}
272}
273
274void
275swap_m88k_thread_state_user_t(
276m88k_thread_state_user_t *user,
277enum NXByteOrder target_byte_sex)
278{
279	user->user = OSSwapInt32(user->user);
280}
281
282void
283swap_m88110_thread_state_impl_t(
284m88110_thread_state_impl_t *spu,
285enum NXByteOrder target_byte_sex)
286{
287    uint32_t i;
288    enum NXByteOrder host_byte_sex;
289
290    struct swapped_m88110_bp_ctrl {
291	union {
292	    struct {
293		unsigned	v:BIT_WIDTH(0);
294		m88110_match_t	addr_match:BITS_WIDTH(12,1);
295		unsigned	:BITS_WIDTH(26,13);
296		unsigned	rwm:BIT_WIDTH(27);
297		unsigned	rw:BIT_WIDTH(28);
298		unsigned	:BITS_WIDTH(31,29);
299	    } fields;
300	    uint32_t word;
301	} u;
302    } sbpc;
303
304    struct swap_m88110_psr {
305	union {
306	    struct {
307		unsigned	:BITS_WIDTH(1,0);
308		unsigned	mxm_dis:BIT_WIDTH(2);
309		unsigned	sfu1dis:BIT_WIDTH(3);
310		unsigned	:BITS_WIDTH(22,4);
311		unsigned	trace:BIT_WIDTH(23);
312		unsigned	:BIT_WIDTH(24);
313		unsigned	sm:BIT_WIDTH(25);
314		unsigned	sgn_imd:BIT_WIDTH(26);
315		unsigned	:BIT_WIDTH(27);
316		unsigned	c:BIT_WIDTH(28);
317		unsigned	se:BIT_WIDTH(29);
318		unsigned	le:BIT_WIDTH(30);
319		unsigned	supr:BIT_WIDTH(31);
320	    } fields;
321	    uint32_t word;
322	} u;
323    } spsr;
324
325    struct swapped_m88110_fp_trap_status {
326	union {
327	    struct {
328		unsigned	efinx:BIT_WIDTH(0);
329		unsigned	efovf:BIT_WIDTH(1);
330		unsigned	efunf:BIT_WIDTH(2);
331		unsigned	efdvz:BIT_WIDTH(3);
332		unsigned	efinv:BIT_WIDTH(4);
333		unsigned	priv:BIT_WIDTH(5);
334		unsigned	unimp:BIT_WIDTH(6);
335		unsigned	int:BIT_WIDTH(7);
336		unsigned	sfu1_disabled:BIT_WIDTH(8);
337		unsigned	:BITS_WIDTH(13,9);
338		m88110_iresult_size_t	iresult_size:BITS_WIDTH(15,14);
339		unsigned	:BITS_WIDTH(31,16);
340	    } fields;
341	    uint32_t word;
342	} u;
343    } sfps;
344
345	host_byte_sex = NXHostByteOrder();
346
347	if(target_byte_sex == host_byte_sex){
348	    for(i = 0; i < M88110_N_DATA_BP; i++){
349		spu->data_bp[i].addr = OSSwapInt32(spu->data_bp[i].addr);
350		memcpy(&sbpc, &(spu->data_bp[i].ctrl),
351		       sizeof(struct swapped_m88110_bp_ctrl));
352		sbpc.u.word = OSSwapInt32(sbpc.u.word);
353		spu->data_bp[i].ctrl.v = sbpc.u.fields.v;
354		spu->data_bp[i].ctrl.addr_match = sbpc.u.fields.addr_match;
355		spu->data_bp[i].ctrl.rwm = sbpc.u.fields.rwm;
356		spu->data_bp[i].ctrl.rw = sbpc.u.fields.rw;
357	    }
358
359	    memcpy(&spsr, &(spu->psr), sizeof(struct swap_m88110_psr));
360	    spsr.u.word = OSSwapInt32(spsr.u.word);
361	    spu->psr.mxm_dis = spsr.u.fields.mxm_dis;
362	    spu->psr.sfu1dis = spsr.u.fields.sfu1dis;
363	    spu->psr.trace = spsr.u.fields.trace;
364	    spu->psr.sm = spsr.u.fields.sm;
365	    spu->psr.sgn_imd = spsr.u.fields.sgn_imd;
366	    spu->psr.c = spsr.u.fields.c;
367	    spu->psr.se = spsr.u.fields.se;
368	    spu->psr.le = spsr.u.fields.le;
369	    spu->psr.supr = spsr.u.fields.supr;
370
371	    memcpy(&sfps, &(spu->fp_trap_status),
372		   sizeof(struct swapped_m88110_fp_trap_status));
373	    sfps.u.word = OSSwapInt32(sfps.u.word);
374	    spu->fp_trap_status.efinx = sfps.u.fields.efinx;
375	    spu->fp_trap_status.efovf = sfps.u.fields.efovf;
376	    spu->fp_trap_status.efunf = sfps.u.fields.efunf;
377	    spu->fp_trap_status.efdvz = sfps.u.fields.efdvz;
378	    spu->fp_trap_status.efinv = sfps.u.fields.efinv;
379	    spu->fp_trap_status.priv = sfps.u.fields.priv;
380	    spu->fp_trap_status.unimp = sfps.u.fields.unimp;
381	    spu->fp_trap_status.sfu1_disabled = sfps.u.fields.sfu1_disabled;
382	    spu->fp_trap_status.iresult_size = sfps.u.fields.iresult_size;
383	}
384	else{
385	    for(i = 0; i < M88110_N_DATA_BP; i++){
386		spu->data_bp[i].addr = OSSwapInt32(spu->data_bp[i].addr);
387		sbpc.u.fields.v = spu->data_bp[i].ctrl.v;
388		sbpc.u.fields.addr_match = spu->data_bp[i].ctrl.addr_match;
389		sbpc.u.fields.rwm = spu->data_bp[i].ctrl.rwm;
390		sbpc.u.fields.rw = spu->data_bp[i].ctrl.rw;
391		sbpc.u.word = OSSwapInt32(sbpc.u.word);
392		memcpy(&(spu->data_bp[i].ctrl), &sbpc,
393		       sizeof(struct swapped_m88110_bp_ctrl));
394	    }
395
396	    spsr.u.fields.mxm_dis = spu->psr.mxm_dis;
397	    spsr.u.fields.sfu1dis = spu->psr.sfu1dis;
398	    spsr.u.fields.trace = spu->psr.trace;
399	    spsr.u.fields.sm = spu->psr.sm;
400	    spsr.u.fields.sgn_imd = spu->psr.sgn_imd;
401	    spsr.u.fields.c = spu->psr.c;
402	    spsr.u.fields.se = spu->psr.se;
403	    spsr.u.fields.le = spu->psr.le;
404	    spsr.u.fields.supr = spu->psr.supr;
405	    spsr.u.word = OSSwapInt32(spsr.u.word);
406	    memcpy(&(spu->psr), &spsr, sizeof(struct swap_m88110_psr));
407
408	    sfps.u.fields.efinx = spu->fp_trap_status.efinx;
409	    sfps.u.fields.efovf = spu->fp_trap_status.efovf;
410	    sfps.u.fields.efunf = spu->fp_trap_status.efunf;
411	    sfps.u.fields.efdvz = spu->fp_trap_status.efdvz;
412	    sfps.u.fields.efinv = spu->fp_trap_status.efinv;
413	    sfps.u.fields.priv = spu->fp_trap_status.priv;
414	    sfps.u.fields.unimp = spu->fp_trap_status.unimp;
415	    sfps.u.fields.sfu1_disabled = spu->fp_trap_status.sfu1_disabled;
416	    sfps.u.fields.iresult_size = spu->fp_trap_status.iresult_size;
417	    sfps.u.word = OSSwapInt32(sfps.u.word);
418	    memcpy(&(spu->fp_trap_status), &sfps,
419		   sizeof(struct swapped_m88110_fp_trap_status));
420	}
421	spu->intermediate_result.x[0] =
422	    OSSwapInt32(spu->intermediate_result.x[0]);
423	spu->intermediate_result.x[1] =
424	    OSSwapInt32(spu->intermediate_result.x[1]);
425	spu->intermediate_result.x[2] =
426	    OSSwapInt32(spu->intermediate_result.x[2]);
427	spu->intermediate_result.x[3] =
428	    OSSwapInt32(spu->intermediate_result.x[3]);
429}
430#endif /* !defined(RLD) */
431