]>
git.proxmox.com Git - qemu.git/blob - target-sparc/op.c
4 Copyright (C) 2003 Thomas M. Ogrisegg <tom@fnord.at>
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #define REG (env->fpr[0])
26 #include "fop_template.h"
28 #define REG (env->fpr[1])
29 #include "fop_template.h"
31 #define REG (env->fpr[2])
32 #include "fop_template.h"
34 #define REG (env->fpr[3])
35 #include "fop_template.h"
37 #define REG (env->fpr[4])
38 #include "fop_template.h"
40 #define REG (env->fpr[5])
41 #include "fop_template.h"
43 #define REG (env->fpr[6])
44 #include "fop_template.h"
46 #define REG (env->fpr[7])
47 #include "fop_template.h"
49 #define REG (env->fpr[8])
50 #include "fop_template.h"
52 #define REG (env->fpr[9])
53 #include "fop_template.h"
55 #define REG (env->fpr[10])
56 #include "fop_template.h"
58 #define REG (env->fpr[11])
59 #include "fop_template.h"
61 #define REG (env->fpr[12])
62 #include "fop_template.h"
64 #define REG (env->fpr[13])
65 #include "fop_template.h"
67 #define REG (env->fpr[14])
68 #include "fop_template.h"
70 #define REG (env->fpr[15])
71 #include "fop_template.h"
73 #define REG (env->fpr[16])
74 #include "fop_template.h"
76 #define REG (env->fpr[17])
77 #include "fop_template.h"
79 #define REG (env->fpr[18])
80 #include "fop_template.h"
82 #define REG (env->fpr[19])
83 #include "fop_template.h"
85 #define REG (env->fpr[20])
86 #include "fop_template.h"
88 #define REG (env->fpr[21])
89 #include "fop_template.h"
91 #define REG (env->fpr[22])
92 #include "fop_template.h"
94 #define REG (env->fpr[23])
95 #include "fop_template.h"
97 #define REG (env->fpr[24])
98 #include "fop_template.h"
100 #define REG (env->fpr[25])
101 #include "fop_template.h"
103 #define REG (env->fpr[26])
104 #include "fop_template.h"
106 #define REG (env->fpr[27])
107 #include "fop_template.h"
109 #define REG (env->fpr[28])
110 #include "fop_template.h"
112 #define REG (env->fpr[29])
113 #include "fop_template.h"
115 #define REG (env->fpr[30])
116 #include "fop_template.h"
118 #define REG (env->fpr[31])
119 #include "fop_template.h"
121 #ifdef TARGET_SPARC64
123 #define REG (env->fpr[32])
124 #include "fop_template.h"
126 #define REG (env->fpr[34])
127 #include "fop_template.h"
129 #define REG (env->fpr[36])
130 #include "fop_template.h"
132 #define REG (env->fpr[38])
133 #include "fop_template.h"
135 #define REG (env->fpr[40])
136 #include "fop_template.h"
138 #define REG (env->fpr[42])
139 #include "fop_template.h"
141 #define REG (env->fpr[44])
142 #include "fop_template.h"
144 #define REG (env->fpr[46])
145 #include "fop_template.h"
147 #define REG (env->fpr[47])
148 #include "fop_template.h"
150 #define REG (env->fpr[50])
151 #include "fop_template.h"
153 #define REG (env->fpr[52])
154 #include "fop_template.h"
156 #define REG (env->fpr[54])
157 #include "fop_template.h"
159 #define REG (env->fpr[56])
160 #include "fop_template.h"
162 #define REG (env->fpr[58])
163 #include "fop_template.h"
165 #define REG (env->fpr[60])
166 #include "fop_template.h"
168 #define REG (env->fpr[62])
169 #include "fop_template.h"
172 #define FLAG_SET(x) ((env->psr&x)?1:0)
174 void OPPROTO
op_umul_T1_T0(void)
177 res
= (uint64_t) T0
* (uint64_t) T1
;
178 #ifdef TARGET_SPARC64
181 T0
= res
& 0xffffffff;
186 void OPPROTO
op_smul_T1_T0(void)
189 res
= (int64_t) ((int32_t) T0
) * (int64_t) ((int32_t) T1
);
190 #ifdef TARGET_SPARC64
193 T0
= res
& 0xffffffff;
198 void OPPROTO
op_udiv_T1_T0(void)
203 x0
= T0
| ((uint64_t) (env
->y
) << 32);
207 raise_exception(TT_DIV_ZERO
);
211 if (x0
> 0xffffffff) {
221 void OPPROTO
op_sdiv_T1_T0(void)
226 x0
= T0
| ((int64_t) (env
->y
) << 32);
230 raise_exception(TT_DIV_ZERO
);
234 if ((int32_t) x0
!= x0
) {
235 T0
= x0
< 0? 0x80000000: 0x7fffffff;
245 #define MEMSUFFIX _raw
247 #if !defined(CONFIG_USER_ONLY)
248 #define MEMSUFFIX _user
251 #define MEMSUFFIX _kernel
254 #ifdef TARGET_SPARC64
255 #define MEMSUFFIX _hypv
260 #ifndef TARGET_SPARC64
261 /* XXX: use another pointer for %iN registers to avoid slow wrapping
263 void OPPROTO
op_save(void)
266 cwp
= (env
->cwp
- 1) & (NWINDOWS
- 1);
267 if (env
->wim
& (1 << cwp
)) {
268 raise_exception(TT_WIN_OVF
);
274 void OPPROTO
op_restore(void)
277 cwp
= (env
->cwp
+ 1) & (NWINDOWS
- 1);
278 if (env
->wim
& (1 << cwp
)) {
279 raise_exception(TT_WIN_UNF
);
285 void OPPROTO
op_rdccr(void)
290 void OPPROTO
op_wrccr(void)
295 // CWP handling is reversed in V9, but we still use the V8 register
297 void OPPROTO
op_rdcwp(void)
302 void OPPROTO
op_wrcwp(void)
307 /* XXX: use another pointer for %iN registers to avoid slow wrapping
309 void OPPROTO
op_save(void)
312 cwp
= (env
->cwp
- 1) & (NWINDOWS
- 1);
313 if (env
->cansave
== 0) {
314 raise_exception(TT_SPILL
| (env
->otherwin
!= 0 ?
315 (TT_WOTHER
| ((env
->wstate
& 0x38) >> 1)):
316 ((env
->wstate
& 0x7) << 2)));
318 if (env
->cleanwin
- env
->canrestore
== 0) {
319 // XXX Clean windows without trap
320 raise_exception(TT_CLRWIN
);
330 void OPPROTO
op_restore(void)
333 cwp
= (env
->cwp
+ 1) & (NWINDOWS
- 1);
334 if (env
->canrestore
== 0) {
335 raise_exception(TT_FILL
| (env
->otherwin
!= 0 ?
336 (TT_WOTHER
| ((env
->wstate
& 0x38) >> 1)):
337 ((env
->wstate
& 0x7) << 2)));
347 void OPPROTO
op_jmp_label(void)
352 #define F_OP(name, p) void OPPROTO op_f##name##p(void)
354 #if defined(CONFIG_USER_ONLY)
355 #define F_BINOP(name) \
358 FT0 = float32_ ## name (FT0, FT1, &env->fp_status); \
362 DT0 = float64_ ## name (DT0, DT1, &env->fp_status); \
366 QT0 = float128_ ## name (QT0, QT1, &env->fp_status); \
369 #define F_BINOP(name) \
372 FT0 = float32_ ## name (FT0, FT1, &env->fp_status); \
376 DT0 = float64_ ## name (DT0, DT1, &env->fp_status); \
386 void OPPROTO
op_fsmuld(void)
388 DT0
= float64_mul(float32_to_float64(FT0
, &env
->fp_status
),
389 float32_to_float64(FT1
, &env
->fp_status
),
393 #if defined(CONFIG_USER_ONLY)
394 void OPPROTO
op_fdmulq(void)
396 QT0
= float128_mul(float64_to_float128(DT0
, &env
->fp_status
),
397 float64_to_float128(DT1
, &env
->fp_status
),
402 #if defined(CONFIG_USER_ONLY)
403 #define F_HELPER(name) \
417 #define F_HELPER(name) \
430 FT0
= float32_chs(FT1
);
433 #ifdef TARGET_SPARC64
436 DT0
= float64_chs(DT1
);
439 #if defined(CONFIG_USER_ONLY)
442 QT0
= float128_chs(QT1
);
449 /* Integer to float conversion. */
450 #ifdef USE_INT_TO_FLOAT_HELPERS
452 #ifdef TARGET_SPARC64
458 FT0
= int32_to_float32(*((int32_t *)&FT1
), &env
->fp_status
);
463 DT0
= int32_to_float64(*((int32_t *)&FT1
), &env
->fp_status
);
466 #if defined(CONFIG_USER_ONLY)
469 QT0
= int32_to_float128(*((int32_t *)&FT1
), &env
->fp_status
);
473 #ifdef TARGET_SPARC64
476 FT0
= int64_to_float32(*((int64_t *)&DT1
), &env
->fp_status
);
481 DT0
= int64_to_float64(*((int64_t *)&DT1
), &env
->fp_status
);
483 #if defined(CONFIG_USER_ONLY)
486 QT0
= int64_to_float128(*((int64_t *)&DT1
), &env
->fp_status
);
493 /* floating point conversion */
494 void OPPROTO
op_fdtos(void)
496 FT0
= float64_to_float32(DT1
, &env
->fp_status
);
499 void OPPROTO
op_fstod(void)
501 DT0
= float32_to_float64(FT1
, &env
->fp_status
);
504 #if defined(CONFIG_USER_ONLY)
505 void OPPROTO
op_fqtos(void)
507 FT0
= float128_to_float32(QT1
, &env
->fp_status
);
510 void OPPROTO
op_fstoq(void)
512 QT0
= float32_to_float128(FT1
, &env
->fp_status
);
515 void OPPROTO
op_fqtod(void)
517 DT0
= float128_to_float64(QT1
, &env
->fp_status
);
520 void OPPROTO
op_fdtoq(void)
522 QT0
= float64_to_float128(DT1
, &env
->fp_status
);
526 /* Float to integer conversion. */
527 void OPPROTO
op_fstoi(void)
529 *((int32_t *)&FT0
) = float32_to_int32_round_to_zero(FT1
, &env
->fp_status
);
532 void OPPROTO
op_fdtoi(void)
534 *((int32_t *)&FT0
) = float64_to_int32_round_to_zero(DT1
, &env
->fp_status
);
537 #if defined(CONFIG_USER_ONLY)
538 void OPPROTO
op_fqtoi(void)
540 *((int32_t *)&FT0
) = float128_to_int32_round_to_zero(QT1
, &env
->fp_status
);
544 #ifdef TARGET_SPARC64
545 void OPPROTO
op_fstox(void)
547 *((int64_t *)&DT0
) = float32_to_int64_round_to_zero(FT1
, &env
->fp_status
);
550 void OPPROTO
op_fdtox(void)
552 *((int64_t *)&DT0
) = float64_to_int64_round_to_zero(DT1
, &env
->fp_status
);
555 #if defined(CONFIG_USER_ONLY)
556 void OPPROTO
op_fqtox(void)
558 *((int64_t *)&DT0
) = float128_to_int64_round_to_zero(QT1
, &env
->fp_status
);
562 void OPPROTO
op_flushw(void)
564 if (env
->cansave
!= NWINDOWS
- 2) {
565 raise_exception(TT_SPILL
| (env
->otherwin
!= 0 ?
566 (TT_WOTHER
| ((env
->wstate
& 0x38) >> 1)):
567 ((env
->wstate
& 0x7) << 2)));
571 void OPPROTO
op_saved(void)
574 if (env
->otherwin
== 0)
581 void OPPROTO
op_restored(void)
584 if (env
->cleanwin
< NWINDOWS
- 1)
586 if (env
->otherwin
== 0)
594 #ifdef TARGET_SPARC64
595 // This function uses non-native bit order
596 #define GET_FIELD(X, FROM, TO) \
597 ((X) >> (63 - (TO)) & ((1ULL << ((TO) - (FROM) + 1)) - 1))
599 // This function uses the order in the manuals, i.e. bit 0 is 2^0
600 #define GET_FIELD_SP(X, FROM, TO) \
601 GET_FIELD(X, 63 - (TO), 63 - (FROM))
603 void OPPROTO
op_array8()
605 T0
= (GET_FIELD_SP(T0
, 60, 63) << (17 + 2 * T1
)) |
606 (GET_FIELD_SP(T0
, 39, 39 + T1
- 1) << (17 + T1
)) |
607 (GET_FIELD_SP(T0
, 17 + T1
- 1, 17) << 17) |
608 (GET_FIELD_SP(T0
, 56, 59) << 13) | (GET_FIELD_SP(T0
, 35, 38) << 9) |
609 (GET_FIELD_SP(T0
, 13, 16) << 5) | (((T0
>> 55) & 1) << 4) |
610 (GET_FIELD_SP(T0
, 33, 34) << 2) | GET_FIELD_SP(T0
, 11, 12);
613 void OPPROTO
op_array16()
615 T0
= ((GET_FIELD_SP(T0
, 60, 63) << (17 + 2 * T1
)) |
616 (GET_FIELD_SP(T0
, 39, 39 + T1
- 1) << (17 + T1
)) |
617 (GET_FIELD_SP(T0
, 17 + T1
- 1, 17) << 17) |
618 (GET_FIELD_SP(T0
, 56, 59) << 13) | (GET_FIELD_SP(T0
, 35, 38) << 9) |
619 (GET_FIELD_SP(T0
, 13, 16) << 5) | (((T0
>> 55) & 1) << 4) |
620 (GET_FIELD_SP(T0
, 33, 34) << 2) | GET_FIELD_SP(T0
, 11, 12)) << 1;
623 void OPPROTO
op_array32()
625 T0
= ((GET_FIELD_SP(T0
, 60, 63) << (17 + 2 * T1
)) |
626 (GET_FIELD_SP(T0
, 39, 39 + T1
- 1) << (17 + T1
)) |
627 (GET_FIELD_SP(T0
, 17 + T1
- 1, 17) << 17) |
628 (GET_FIELD_SP(T0
, 56, 59) << 13) | (GET_FIELD_SP(T0
, 35, 38) << 9) |
629 (GET_FIELD_SP(T0
, 13, 16) << 5) | (((T0
>> 55) & 1) << 4) |
630 (GET_FIELD_SP(T0
, 33, 34) << 2) | GET_FIELD_SP(T0
, 11, 12)) << 2;
633 void OPPROTO
op_alignaddr()
639 env
->gsr
|= tmp
& 7ULL;
643 void OPPROTO
op_faligndata()
647 tmp
= (*((uint64_t *)&DT0
)) << ((env
->gsr
& 7) * 8);
648 tmp
|= (*((uint64_t *)&DT1
)) >> (64 - (env
->gsr
& 7) * 8);
649 *((uint64_t *)&DT0
) = tmp
;
652 void OPPROTO
op_movl_FT0_0(void)
654 *((uint32_t *)&FT0
) = 0;
657 void OPPROTO
op_movl_DT0_0(void)
659 *((uint64_t *)&DT0
) = 0;
662 void OPPROTO
op_movl_FT0_1(void)
664 *((uint32_t *)&FT0
) = 0xffffffff;
667 void OPPROTO
op_movl_DT0_1(void)
669 *((uint64_t *)&DT0
) = 0xffffffffffffffffULL
;
672 void OPPROTO
op_fnot(void)
674 *(uint64_t *)&DT0
= ~*(uint64_t *)&DT1
;
677 void OPPROTO
op_fnots(void)
679 *(uint32_t *)&FT0
= ~*(uint32_t *)&FT1
;
682 void OPPROTO
op_fnor(void)
684 *(uint64_t *)&DT0
= ~(*(uint64_t *)&DT0
| *(uint64_t *)&DT1
);
687 void OPPROTO
op_fnors(void)
689 *(uint32_t *)&FT0
= ~(*(uint32_t *)&FT0
| *(uint32_t *)&FT1
);
692 void OPPROTO
op_for(void)
694 *(uint64_t *)&DT0
|= *(uint64_t *)&DT1
;
697 void OPPROTO
op_fors(void)
699 *(uint32_t *)&FT0
|= *(uint32_t *)&FT1
;
702 void OPPROTO
op_fxor(void)
704 *(uint64_t *)&DT0
^= *(uint64_t *)&DT1
;
707 void OPPROTO
op_fxors(void)
709 *(uint32_t *)&FT0
^= *(uint32_t *)&FT1
;
712 void OPPROTO
op_fand(void)
714 *(uint64_t *)&DT0
&= *(uint64_t *)&DT1
;
717 void OPPROTO
op_fands(void)
719 *(uint32_t *)&FT0
&= *(uint32_t *)&FT1
;
722 void OPPROTO
op_fornot(void)
724 *(uint64_t *)&DT0
= *(uint64_t *)&DT0
| ~*(uint64_t *)&DT1
;
727 void OPPROTO
op_fornots(void)
729 *(uint32_t *)&FT0
= *(uint32_t *)&FT0
| ~*(uint32_t *)&FT1
;
732 void OPPROTO
op_fandnot(void)
734 *(uint64_t *)&DT0
= *(uint64_t *)&DT0
& ~*(uint64_t *)&DT1
;
737 void OPPROTO
op_fandnots(void)
739 *(uint32_t *)&FT0
= *(uint32_t *)&FT0
& ~*(uint32_t *)&FT1
;
742 void OPPROTO
op_fnand(void)
744 *(uint64_t *)&DT0
= ~(*(uint64_t *)&DT0
& *(uint64_t *)&DT1
);
747 void OPPROTO
op_fnands(void)
749 *(uint32_t *)&FT0
= ~(*(uint32_t *)&FT0
& *(uint32_t *)&FT1
);
752 void OPPROTO
op_fxnor(void)
754 *(uint64_t *)&DT0
^= ~*(uint64_t *)&DT1
;
757 void OPPROTO
op_fxnors(void)
759 *(uint32_t *)&FT0
^= ~*(uint32_t *)&FT1
;
762 #ifdef WORDS_BIGENDIAN
763 #define VIS_B64(n) b[7 - (n)]
764 #define VIS_W64(n) w[3 - (n)]
765 #define VIS_SW64(n) sw[3 - (n)]
766 #define VIS_L64(n) l[1 - (n)]
767 #define VIS_B32(n) b[3 - (n)]
768 #define VIS_W32(n) w[1 - (n)]
770 #define VIS_B64(n) b[n]
771 #define VIS_W64(n) w[n]
772 #define VIS_SW64(n) sw[n]
773 #define VIS_L64(n) l[n]
774 #define VIS_B32(n) b[n]
775 #define VIS_W32(n) w[n]
793 void OPPROTO
op_fpmerge(void)
800 // Reverse calculation order to handle overlap
801 d
.VIS_B64(7) = s
.VIS_B64(3);
802 d
.VIS_B64(6) = d
.VIS_B64(3);
803 d
.VIS_B64(5) = s
.VIS_B64(2);
804 d
.VIS_B64(4) = d
.VIS_B64(2);
805 d
.VIS_B64(3) = s
.VIS_B64(1);
806 d
.VIS_B64(2) = d
.VIS_B64(1);
807 d
.VIS_B64(1) = s
.VIS_B64(0);
808 //d.VIS_B64(0) = d.VIS_B64(0);
813 void OPPROTO
op_fmul8x16(void)
822 tmp = (int32_t)d.VIS_SW64(r) * (int32_t)s.VIS_B64(r); \
823 if ((tmp & 0xff) > 0x7f) \
825 d.VIS_W64(r) = tmp >> 8;
836 void OPPROTO
op_fmul8x16al(void)
845 tmp = (int32_t)d.VIS_SW64(1) * (int32_t)s.VIS_B64(r); \
846 if ((tmp & 0xff) > 0x7f) \
848 d.VIS_W64(r) = tmp >> 8;
859 void OPPROTO
op_fmul8x16au(void)
868 tmp = (int32_t)d.VIS_SW64(0) * (int32_t)s.VIS_B64(r); \
869 if ((tmp & 0xff) > 0x7f) \
871 d.VIS_W64(r) = tmp >> 8;
882 void OPPROTO
op_fmul8sux16(void)
891 tmp = (int32_t)d.VIS_SW64(r) * ((int32_t)s.VIS_SW64(r) >> 8); \
892 if ((tmp & 0xff) > 0x7f) \
894 d.VIS_W64(r) = tmp >> 8;
905 void OPPROTO
op_fmul8ulx16(void)
914 tmp = (int32_t)d.VIS_SW64(r) * ((uint32_t)s.VIS_B64(r * 2)); \
915 if ((tmp & 0xff) > 0x7f) \
917 d.VIS_W64(r) = tmp >> 8;
928 void OPPROTO
op_fmuld8sux16(void)
937 tmp = (int32_t)d.VIS_SW64(r) * ((int32_t)s.VIS_SW64(r) >> 8); \
938 if ((tmp & 0xff) > 0x7f) \
942 // Reverse calculation order to handle overlap
950 void OPPROTO
op_fmuld8ulx16(void)
959 tmp = (int32_t)d.VIS_SW64(r) * ((uint32_t)s.VIS_B64(r * 2)); \
960 if ((tmp & 0xff) > 0x7f) \
964 // Reverse calculation order to handle overlap
972 void OPPROTO
op_fexpand(void)
977 s
.l
= (uint32_t)(*(uint64_t *)&DT0
& 0xffffffff);
979 d
.VIS_L64(0) = s
.VIS_W32(0) << 4;
980 d
.VIS_L64(1) = s
.VIS_W32(1) << 4;
981 d
.VIS_L64(2) = s
.VIS_W32(2) << 4;
982 d
.VIS_L64(3) = s
.VIS_W32(3) << 4;
987 #define VIS_OP(name, F) \
988 void OPPROTO name##16(void) \
995 d.VIS_W64(0) = F(d.VIS_W64(0), s.VIS_W64(0)); \
996 d.VIS_W64(1) = F(d.VIS_W64(1), s.VIS_W64(1)); \
997 d.VIS_W64(2) = F(d.VIS_W64(2), s.VIS_W64(2)); \
998 d.VIS_W64(3) = F(d.VIS_W64(3), s.VIS_W64(3)); \
1003 void OPPROTO name##16s(void) \
1010 d.VIS_W32(0) = F(d.VIS_W32(0), s.VIS_W32(0)); \
1011 d.VIS_W32(1) = F(d.VIS_W32(1), s.VIS_W32(1)); \
1016 void OPPROTO name##32(void) \
1023 d.VIS_L64(0) = F(d.VIS_L64(0), s.VIS_L64(0)); \
1024 d.VIS_L64(1) = F(d.VIS_L64(1), s.VIS_L64(1)); \
1029 void OPPROTO name##32s(void) \
1036 d.l = F(d.l, s.l); \
1041 #define FADD(a, b) ((a) + (b))
1042 #define FSUB(a, b) ((a) - (b))
1043 VIS_OP(op_fpadd
, FADD
)
1044 VIS_OP(op_fpsub
, FSUB
)
1046 #define VIS_CMPOP(name, F) \
1047 void OPPROTO name##16(void) \
1054 d.VIS_W64(0) = F(d.VIS_W64(0), s.VIS_W64(0))? 1: 0; \
1055 d.VIS_W64(0) |= F(d.VIS_W64(1), s.VIS_W64(1))? 2: 0; \
1056 d.VIS_W64(0) |= F(d.VIS_W64(2), s.VIS_W64(2))? 4: 0; \
1057 d.VIS_W64(0) |= F(d.VIS_W64(3), s.VIS_W64(3))? 8: 0; \
1062 void OPPROTO name##32(void) \
1069 d.VIS_L64(0) = F(d.VIS_L64(0), s.VIS_L64(0))? 1: 0; \
1070 d.VIS_L64(0) |= F(d.VIS_L64(1), s.VIS_L64(1))? 2: 0; \
1075 #define FCMPGT(a, b) ((a) > (b))
1076 #define FCMPEQ(a, b) ((a) == (b))
1077 #define FCMPLE(a, b) ((a) <= (b))
1078 #define FCMPNE(a, b) ((a) != (b))
1080 VIS_CMPOP(op_fcmpgt
, FCMPGT
)
1081 VIS_CMPOP(op_fcmpeq
, FCMPEQ
)
1082 VIS_CMPOP(op_fcmple
, FCMPLE
)
1083 VIS_CMPOP(op_fcmpne
, FCMPNE
)
1087 #define CHECK_ALIGN_OP(align) \
1088 void OPPROTO op_check_align_T0_ ## align (void) \
1091 raise_exception(TT_UNALIGNED); \