OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [m68k/] [math-emu/] [fp_cond.S] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * fp_cond.S
3
 *
4
 * Copyright Roman Zippel, 1997.  All rights reserved.
5
 *
6
 * Redistribution and use in source and binary forms, with or without
7
 * modification, are permitted provided that the following conditions
8
 * are met:
9
 * 1. Redistributions of source code must retain the above copyright
10
 *    notice, and the entire permission notice in its entirety,
11
 *    including the disclaimer of warranties.
12
 * 2. Redistributions in binary form must reproduce the above copyright
13
 *    notice, this list of conditions and the following disclaimer in the
14
 *    documentation and/or other materials provided with the distribution.
15
 * 3. The name of the author may not be used to endorse or promote
16
 *    products derived from this software without specific prior
17
 *    written permission.
18
 *
19
 * ALTERNATIVELY, this product may be distributed under the terms of
20
 * the GNU General Public License, in which case the provisions of the GPL are
21
 * required INSTEAD OF the above restrictions.  (This clause is
22
 * necessary due to a potential bad interaction between the GPL and
23
 * the restrictions contained in a BSD-style copyright.)
24
 *
25
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
26
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
27
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28
 * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
29
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
31
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
33
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
35
 * OF THE POSSIBILITY OF SUCH DAMAGE.
36
 */
37
 
38
#include "fp_emu.h"
39
#include "fp_decode.h"
40
 
41
        .globl  fp_fscc, fp_fbccw, fp_fbccl
42
 
43
#ifdef FPU_EMU_DEBUG
44
fp_fnop:
45
        printf  PDECODE,"fnop\n"
46
        jra     fp_end
47
#else
48
#define fp_fnop fp_end
49
#endif
50
 
51
fp_fbccw:
52
        tst.w   %d2
53
        jeq     fp_fnop
54
        printf  PDECODE,"fbccw "
55
        fp_get_pc %a0
56
        lea     (-2,%a0,%d2.w),%a0
57
        jra     1f
58
 
59
fp_fbccl:
60
        printf  PDECODE,"fbccl "
61
        fp_get_pc %a0
62
        move.l  %d2,%d0
63
        swap    %d0
64
        fp_get_instr_word %d0,fp_err_ua1
65
        lea     (-2,%a0,%d0.l),%a0
66
1:      printf  PDECODE,"%x",1,%a0
67
        move.l  %d2,%d0
68
        swap    %d0
69
        jsr     fp_compute_cond
70
        tst.l   %d0
71
        jeq     1f
72
        fp_put_pc %a0,1
73
1:      printf  PDECODE,"\n"
74
        jra     fp_end
75
 
76
fp_fdbcc:
77
        printf  PDECODE,"fdbcc "
78
        fp_get_pc %a1                           | calculate new pc
79
        fp_get_instr_word %d0,fp_err_ua1
80
        add.w   %d0,%a1
81
        fp_decode_addr_reg
82
        printf  PDECODE,"d%d,%x\n",2,%d0,%a1
83
        swap    %d1                             | test condition in %d1
84
        tst.w   %d1
85
        jne     2f
86
        move.l  %d0,%d1
87
        jsr     fp_get_data_reg
88
        subq.w  #1,%d0
89
        jcs     1f
90
        fp_put_pc %a1,1
91
1:      jsr     fp_put_data_reg
92
2:      jra     fp_end
93
 
94
| set flags for decode macros for fs
95
do_fscc=1
96
do_no_pc_mode=1
97
 
98
fp_fscc:
99
        printf  PDECODE,"fscc "
100
        move.l  %d2,%d0
101
        jsr     fp_compute_cond
102
        move.w  %d0,%d1
103
        swap    %d1
104
 
105
        | decode addressing mode
106
        fp_decode_addr_mode
107
 
108
        .long   fp_data, fp_fdbcc
109
        .long   fp_indirect, fp_postinc
110
        .long   fp_predecr, fp_disp16
111
        .long   fp_extmode0, fp_extmode1
112
 
113
        | addressing mode: data register direct
114
fp_data:
115
        fp_mode_data_direct
116
        move.w  %d0,%d1                 | save register nr
117
        jsr     fp_get_data_reg
118
        swap    %d1
119
        move.b  %d1,%d0
120
        swap    %d1
121
        jsr     fp_put_data_reg
122
        printf  PDECODE,"\n"
123
        jra     fp_end
124
 
125
fp_indirect:
126
        fp_mode_addr_indirect
127
        jra     fp_do_scc
128
 
129
fp_postinc:
130
        fp_mode_addr_indirect_postinc
131
        jra     fp_do_scc
132
 
133
fp_predecr:
134
        fp_mode_addr_indirect_predec
135
        jra     fp_do_scc
136
 
137
fp_disp16:
138
        fp_mode_addr_indirect_disp16
139
        jra     fp_do_scc
140
 
141
fp_extmode0:
142
        fp_mode_addr_indirect_extmode0
143
        jra     fp_do_scc
144
 
145
fp_extmode1:
146
        bfextu  %d2{#13,#3},%d0
147
        jmp     ([0f:w,%pc,%d0*4])
148
 
149
        .align  4
150
0:
151
        .long   fp_absolute_short, fp_absolute_long
152
        .long   fp_ill, fp_ill          | NOTE: jump here to ftrap.x
153
        .long   fp_ill, fp_ill
154
        .long   fp_ill, fp_ill
155
 
156
fp_absolute_short:
157
        fp_mode_abs_short
158
        jra     fp_do_scc
159
 
160
fp_absolute_long:
161
        fp_mode_abs_long
162
|       jra     fp_do_scc
163
 
164
fp_do_scc:
165
        swap    %d1
166
        putuser.b %d1,(%a0),fp_err_ua1,%a0
167
        printf  PDECODE,"\n"
168
        jra     fp_end
169
 
170
 
171
#define tst_NAN btst #24,%d1
172
#define tst_Z   btst #26,%d1
173
#define tst_N   btst #27,%d1
174
 
175
fp_compute_cond:
176
        move.l  (FPD_FPSR,FPDATA),%d1
177
        btst    #4,%d0
178
        jeq     1f
179
        tst_NAN
180
        jeq     1f
181
        bset    #15,%d1
182
        bset    #7,%d1
183
        move.l  %d1,(FPD_FPSR,FPDATA)
184
1:      and.w   #0xf,%d0
185
        jmp     ([0f:w,%pc,%d0.w*4])
186
 
187
        .align  4
188
0:
189
        .long   fp_f  , fp_eq , fp_ogt, fp_oge
190
        .long   fp_olt, fp_ole, fp_ogl, fp_or
191
        .long   fp_un , fp_ueq, fp_ugt, fp_uge
192
        .long   fp_ult, fp_ule, fp_ne , fp_t
193
 
194
fp_f:
195
        moveq   #0,%d0
196
        rts
197
 
198
fp_eq:
199
        moveq   #0,%d0
200
        tst_Z
201
        jeq     1f
202
        moveq   #-1,%d0
203
1:      rts
204
 
205
fp_ogt:
206
        moveq   #0,%d0
207
        tst_NAN
208
        jne     1f
209
        tst_Z
210
        jne     1f
211
        tst_N
212
        jne     1f
213
        moveq   #-1,%d0
214
1:      rts
215
 
216
fp_oge:
217
        moveq   #-1,%d0
218
        tst_Z
219
        jne     2f
220
        tst_NAN
221
        jne     1f
222
        tst_N
223
        jeq     2f
224
1:      moveq   #0,%d0
225
2:      rts
226
 
227
fp_olt:
228
        moveq   #0,%d0
229
        tst_NAN
230
        jne     1f
231
        tst_Z
232
        jne     1f
233
        tst_N
234
        jeq     1f
235
        moveq   #-1,%d0
236
1:      rts
237
 
238
fp_ole:
239
        moveq   #-1,%d0
240
        tst_Z
241
        jne     2f
242
        tst_NAN
243
        jne     1f
244
        tst_N
245
        jne     2f
246
1:      moveq   #0,%d0
247
2:      rts
248
 
249
fp_ogl:
250
        moveq   #0,%d0
251
        tst_NAN
252
        jne     1f
253
        tst_Z
254
        jne     1f
255
        moveq   #-1,%d0
256
1:      rts
257
 
258
fp_or:
259
        moveq   #0,%d0
260
        tst_NAN
261
        jne     1f
262
        moveq   #-1,%d0
263
1:      rts
264
 
265
fp_un:
266
        moveq   #0,%d0
267
        tst_NAN
268
        jeq     1f
269
        moveq   #-1,%d0
270
        rts
271
 
272
fp_ueq:
273
        moveq   #-1,%d0
274
        tst_NAN
275
        jne     1f
276
        tst_Z
277
        jne     1f
278
        moveq   #0,%d0
279
1:      rts
280
 
281
fp_ugt:
282
        moveq   #-1,%d0
283
        tst_NAN
284
        jne     2f
285
        tst_N
286
        jne     1f
287
        tst_Z
288
        jeq     2f
289
1:      moveq   #0,%d0
290
2:      rts
291
 
292
fp_uge:
293
        moveq   #-1,%d0
294
        tst_NAN
295
        jne     1f
296
        tst_Z
297
        jne     1f
298
        tst_N
299
        jeq     1f
300
        moveq   #0,%d0
301
1:      rts
302
 
303
fp_ult:
304
        moveq   #-1,%d0
305
        tst_NAN
306
        jne     2f
307
        tst_Z
308
        jne     1f
309
        tst_N
310
        jne     2f
311
1:      moveq   #0,%d0
312
2:      rts
313
 
314
fp_ule:
315
        moveq   #-1,%d0
316
        tst_NAN
317
        jne     1f
318
        tst_Z
319
        jne     1f
320
        tst_N
321
        jne     1f
322
        moveq   #0,%d0
323
1:      rts
324
 
325
fp_ne:
326
        moveq   #0,%d0
327
        tst_Z
328
        jne     1f
329
        moveq   #-1,%d0
330
1:      rts
331
 
332
fp_t:
333
        moveq   #-1,%d0
334
        rts

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.