mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Add functional hppa port. All tests pass.
* include/lightning/jit_hppa.h, lib/jit_hppa-cpu.c, lib/jit_hppa-fpu.c, lib/jit_hppa.c: New files implementing the hppa port. Built on Debian Linux PA-RISC 2.0, 32 bit. * check/float.tst: Add preprocessor for hppa expected values when converting NaN and +-Inf to an integer. * check/ldst.inc: Ensure double load/store tests use an 8 byte aligned address by default. * lib/lightning.c: Correct a bug found during tests in the new port, where qmul* and qdiv* were not properly setting one of the result registers as modified in the function, what would be a problem if the only "write" usage were the qmul* or qdiv*. * check/varargs.tst, check/varargs.ok: Add one extra interleaved integer/double test to validate proper code generation in the extra case. * check/lightning.c, configure.ac, include/lightning.h, include/lightning/Makefile.am, include/lightning/jit_private.h, lib/Makefile.am, lib/jit_disasm.c: Update for the hppa port.
This commit is contained in:
parent
e80b244f34
commit
3356b9d93a
17 changed files with 5111 additions and 6 deletions
27
ChangeLog
27
ChangeLog
|
@ -1,3 +1,30 @@
|
||||||
|
2013-06-01 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
|
* include/lightning/jit_hppa.h, lib/jit_hppa-cpu.c,
|
||||||
|
lib/jit_hppa-fpu.c, lib/jit_hppa.c: New files implementing
|
||||||
|
the hppa port. Built on Debian Linux PA-RISC 2.0, 32 bit.
|
||||||
|
|
||||||
|
* check/float.tst: Add preprocessor for hppa expected
|
||||||
|
values when converting NaN and +-Inf to an integer.
|
||||||
|
|
||||||
|
* check/ldst.inc: Ensure double load/store tests use an
|
||||||
|
8 byte aligned address by default.
|
||||||
|
|
||||||
|
* lib/lightning.c: Correct a bug found during tests in
|
||||||
|
the new port, where qmul* and qdiv* were not properly
|
||||||
|
setting one of the result registers as modified in the
|
||||||
|
function, what would be a problem if the only "write"
|
||||||
|
usage were the qmul* or qdiv*.
|
||||||
|
|
||||||
|
* check/varargs.tst, check/varargs.ok: Add one extra
|
||||||
|
interleaved integer/double test to validate proper code
|
||||||
|
generation in the extra case.
|
||||||
|
|
||||||
|
* check/lightning.c, configure.ac, include/lightning.h,
|
||||||
|
include/lightning/Makefile.am,
|
||||||
|
include/lightning/jit_private.h, lib/Makefile.am,
|
||||||
|
lib/jit_disasm.c: Update for the hppa port.
|
||||||
|
|
||||||
2013-04-27 Paulo Andrade <pcpa@gnu.org>
|
2013-04-27 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
* check/varargs.tst: Correct misplaced .align directive
|
* check/varargs.tst: Correct misplaced .align directive
|
||||||
|
|
|
@ -14,14 +14,14 @@ ok:
|
||||||
# define x80 0x8000000000000000
|
# define x80 0x8000000000000000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __mips__ || __sparc__
|
#if __mips__ || __sparc__ || __hppa__
|
||||||
# define wnan x7f
|
# define wnan x7f
|
||||||
#elif __arm__
|
#elif __arm__
|
||||||
# define wnan 0
|
# define wnan 0
|
||||||
#else
|
#else
|
||||||
# define wnan x80
|
# define wnan x80
|
||||||
#endif
|
#endif
|
||||||
#if __mips__ || __arm__ || __ppc__ || __sparc__
|
#if __mips__ || __arm__ || __ppc__ || __sparc__ || __hppa__
|
||||||
# define wpinf x7f
|
# define wpinf x7f
|
||||||
#else
|
#else
|
||||||
# define wpinf x80
|
# define wpinf x80
|
||||||
|
|
|
@ -63,6 +63,7 @@
|
||||||
.data 512
|
.data 512
|
||||||
ok:
|
ok:
|
||||||
.c "ok\n"
|
.c "ok\n"
|
||||||
|
.align 8
|
||||||
t0:
|
t0:
|
||||||
c0:
|
c0:
|
||||||
.c 0
|
.c 0
|
||||||
|
|
|
@ -3974,6 +3974,11 @@ main(int argc, char *argv[])
|
||||||
opt_short += snprintf(cmdline + opt_short,
|
opt_short += snprintf(cmdline + opt_short,
|
||||||
sizeof(cmdline) - opt_short,
|
sizeof(cmdline) - opt_short,
|
||||||
" -D__ia64__=1");
|
" -D__ia64__=1");
|
||||||
|
#endif
|
||||||
|
#if defined(__hppa__)
|
||||||
|
opt_short += snprintf(cmdline + opt_short,
|
||||||
|
sizeof(cmdline) - opt_short,
|
||||||
|
" -D__hppa__=1");
|
||||||
#endif
|
#endif
|
||||||
if ((parser.fp = popen(cmdline, "r")) == NULL)
|
if ((parser.fp = popen(cmdline, "r")) == NULL)
|
||||||
error("cannot execute %s", cmdline);
|
error("cannot execute %s", cmdline);
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
0 1 2 3 4 5 6 7 8 9
|
0 1 2 3 4 5 6 7 8 9
|
||||||
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
|
0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0
|
||||||
0 0.0 1 1.0 2 2.0 3 3.0 4 4.0 5 5.0 6 6.0 7 7.0 8 8.0 9 9.0
|
0 0.0 1 1.0 2 2.0 3 3.0 4 4.0 5 5.0 6 6.0 7 7.0 8 8.0 9 9.0
|
||||||
|
0.0 0 1.0 1 2.0 2 3.0 3 4.0 4 5.0 5 6.0 6 7.0 7 8.0 8 9.0 9
|
||||||
|
|
|
@ -15,6 +15,10 @@ idfmt:
|
||||||
.c "%d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f\n"
|
.c "%d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f\n"
|
||||||
ldfmt:
|
ldfmt:
|
||||||
.c "%d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf\n"
|
.c "%d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf\n"
|
||||||
|
difmt:
|
||||||
|
.c "%.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d %.1f %d\n"
|
||||||
|
dlfmt:
|
||||||
|
.c "%lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d %lf %d\n"
|
||||||
.align 8
|
.align 8
|
||||||
buff:
|
buff:
|
||||||
.size 256
|
.size 256
|
||||||
|
@ -276,5 +280,119 @@ outid:
|
||||||
ellipsis
|
ellipsis
|
||||||
finishi @printf
|
finishi @printf
|
||||||
|
|
||||||
|
/*
|
||||||
|
sprintf(buff,
|
||||||
|
"%.1f %d %.1f %d %.1f %d %.1f %d %.1f %d "
|
||||||
|
"%.1f %d %.1f %d %.1f %d %.1f %d %.1f %d\n",
|
||||||
|
0.0, 0, 1.0, 1, 2.0, 2, 3.0, 3, 4.0, 4,
|
||||||
|
5, 5.0, 6.0, 6, 7.0, 7, 8.0, 8, 9.0, 9);
|
||||||
|
*/
|
||||||
|
prepare
|
||||||
|
pushargi buff
|
||||||
|
pushargi difmt
|
||||||
|
ellipsis
|
||||||
|
pushargi_d 0.0
|
||||||
|
pushargi 0
|
||||||
|
pushargi_d 1.0
|
||||||
|
pushargi 1
|
||||||
|
pushargi_d 2.0
|
||||||
|
pushargi 2
|
||||||
|
pushargi_d 3.0
|
||||||
|
pushargi 3
|
||||||
|
pushargi_d 4.0
|
||||||
|
pushargi 4
|
||||||
|
pushargi_d 5.0
|
||||||
|
pushargi 5
|
||||||
|
pushargi_d 6.0
|
||||||
|
pushargi 6
|
||||||
|
pushargi_d 7.0
|
||||||
|
pushargi 7
|
||||||
|
pushargi_d 8.0
|
||||||
|
pushargi 8
|
||||||
|
pushargi_d 9.0
|
||||||
|
pushargi 9
|
||||||
|
finishi @sprintf
|
||||||
|
|
||||||
|
/*
|
||||||
|
sscanf(buff,
|
||||||
|
"%lf %d %lf %d %lf %d %lf %d %lf %d "
|
||||||
|
"%lf %d %lf %d %lf %d %lf %d %lf %d \n",
|
||||||
|
dchk+0, ichk+0, dchk+1, ichk+1, dchk+2,
|
||||||
|
ichk+2, dchk+3, ichk+3, dchk+4, ichk+4,
|
||||||
|
dchk+5, ichk+5, dchk+6, ichk+6, dchk+7,
|
||||||
|
ichk+7, dchk+8, ichk+8, dchk+9, ichk+9);
|
||||||
|
*/
|
||||||
|
movi %v0 dchk
|
||||||
|
movi %v1 ichk
|
||||||
|
prepare
|
||||||
|
pushargi buff
|
||||||
|
pushargi dlfmt
|
||||||
|
ellipsis
|
||||||
|
pushargr %v0 /* 0 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 1 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 2 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 3 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 4 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 5 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 6 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 7 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 8 */
|
||||||
|
addi %v0 %v0 8
|
||||||
|
pushargr %v1
|
||||||
|
addi %v1 %v1 4
|
||||||
|
pushargr %v0 /* 9 */
|
||||||
|
pushargr %v1
|
||||||
|
finishi @sscanf
|
||||||
|
|
||||||
|
movi %v0 ichk
|
||||||
|
movi %v1 dchk
|
||||||
|
movi %r0 0
|
||||||
|
movi_d %f0 0.0
|
||||||
|
loopdi:
|
||||||
|
ldr_i %r1 %v0
|
||||||
|
beqr check_d %r0 %r1
|
||||||
|
calli @abort
|
||||||
|
check_d:
|
||||||
|
ldr_d %f1 %v1
|
||||||
|
beqr_d nextdi %f0 %f1
|
||||||
|
calli @abort
|
||||||
|
nextdi:
|
||||||
|
addi %r0 %r0 1
|
||||||
|
addi_d %f0 %f0 1.0
|
||||||
|
bgei outdi %r0 10
|
||||||
|
addi %v0 %v0 4
|
||||||
|
addi %v1 %v1 8
|
||||||
|
jmpi loopdi
|
||||||
|
outdi:
|
||||||
|
|
||||||
|
prepare
|
||||||
|
pushargi buff
|
||||||
|
ellipsis
|
||||||
|
finishi @printf
|
||||||
|
|
||||||
ret
|
ret
|
||||||
epilog
|
epilog
|
||||||
|
|
|
@ -74,6 +74,7 @@ case "$target_cpu" in
|
||||||
*powerpc*) cpu=ppc ;;
|
*powerpc*) cpu=ppc ;;
|
||||||
*sparc*) cpu=sparc ;;
|
*sparc*) cpu=sparc ;;
|
||||||
ia64) cpu=ia64 ;;
|
ia64) cpu=ia64 ;;
|
||||||
|
hppa*) cpu=hppa ;;
|
||||||
*) ;;
|
*) ;;
|
||||||
esac
|
esac
|
||||||
AM_CONDITIONAL(cpu_arm, [test cpu-$cpu = cpu-arm])
|
AM_CONDITIONAL(cpu_arm, [test cpu-$cpu = cpu-arm])
|
||||||
|
@ -82,6 +83,7 @@ AM_CONDITIONAL(cpu_ppc, [test cpu-$cpu = cpu-ppc])
|
||||||
AM_CONDITIONAL(cpu_sparc, [test cpu-$cpu = cpu-sparc])
|
AM_CONDITIONAL(cpu_sparc, [test cpu-$cpu = cpu-sparc])
|
||||||
AM_CONDITIONAL(cpu_x86, [test cpu-$cpu = cpu-x86])
|
AM_CONDITIONAL(cpu_x86, [test cpu-$cpu = cpu-x86])
|
||||||
AM_CONDITIONAL(cpu_ia64, [test cpu-$cpu = cpu-ia64])
|
AM_CONDITIONAL(cpu_ia64, [test cpu-$cpu = cpu-ia64])
|
||||||
|
AM_CONDITIONAL(cpu_hppa, [test cpu-$cpu = cpu-hppa])
|
||||||
|
|
||||||
# Test x87 if both, x87 and sse2 available
|
# Test x87 if both, x87 and sse2 available
|
||||||
ac_cv_test_x86_x87=
|
ac_cv_test_x86_x87=
|
||||||
|
|
|
@ -76,6 +76,8 @@ typedef jit_int32_t jit_fpr_t;
|
||||||
# include <lightning/jit_sparc.h>
|
# include <lightning/jit_sparc.h>
|
||||||
#elif defined(__ia64__)
|
#elif defined(__ia64__)
|
||||||
# include <lightning/jit_ia64.h>
|
# include <lightning/jit_ia64.h>
|
||||||
|
#elif defined(__hppa__)
|
||||||
|
# include <lightning/jit_hppa.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define jit_flag_node 0x00000001 /* patch node not absolute */
|
#define jit_flag_node 0x00000001 /* patch node not absolute */
|
||||||
|
|
|
@ -41,3 +41,7 @@ if cpu_ia64
|
||||||
lightning_include_HEADERS = \
|
lightning_include_HEADERS = \
|
||||||
jit_ia64.h
|
jit_ia64.h
|
||||||
endif
|
endif
|
||||||
|
if cpu_hppa
|
||||||
|
lightning_include_HEADERS = \
|
||||||
|
jit_hppa.h
|
||||||
|
endif
|
||||||
|
|
123
include/lightning/jit_hppa.h
Normal file
123
include/lightning/jit_hppa.h
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Free Software Foundation, Inc.
|
||||||
|
*
|
||||||
|
* This is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Paulo Cesar Pereira de Andrade
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _jit_hppa_h
|
||||||
|
#define _jit_hppa_h
|
||||||
|
|
||||||
|
#define JIT_HASH_CONSTS 1
|
||||||
|
#define JIT_NUM_OPERANDS 3
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
#define jit_arg_reg_p(i) (i >= 0 && i <= 4)
|
||||||
|
#define jit_arg_f_reg_p(i) (i >= 0 && i <= 4)
|
||||||
|
_R0, /* Always zero */
|
||||||
|
_R1, /* ADDIL implicit target */
|
||||||
|
_R2, /* B,L implicit target */
|
||||||
|
#define jit_r_num() 4
|
||||||
|
#define jit_r(n) ((n) < 4 ? _R4 + (n) : _R10 + (n))
|
||||||
|
#define jit_v_num() 4
|
||||||
|
#define jit_v(n) ((n) < 4 ? _R7 + (n) : _R11 + (n))
|
||||||
|
#define jit_f_num() 8
|
||||||
|
#define jit_f(n) (_F12 - (n))
|
||||||
|
#define JIT_FP _R3
|
||||||
|
#define JIT_R0 _R4
|
||||||
|
#define JIT_R1 _R5
|
||||||
|
#define JIT_R2 _R6
|
||||||
|
#define JIT_V0 _R7
|
||||||
|
#define JIT_V1 _R8
|
||||||
|
#define JIT_V2 _R9
|
||||||
|
_R3,
|
||||||
|
_R19,
|
||||||
|
_R20,
|
||||||
|
_R21,
|
||||||
|
_R22,
|
||||||
|
_R29, /* ret1 */
|
||||||
|
_R28, /* ret0 */
|
||||||
|
_R4,
|
||||||
|
_R5,
|
||||||
|
_R6,
|
||||||
|
_R7,
|
||||||
|
_R8,
|
||||||
|
_R9,
|
||||||
|
_R10,
|
||||||
|
_R11,
|
||||||
|
_R12,
|
||||||
|
_R13,
|
||||||
|
_R14,
|
||||||
|
_R15,
|
||||||
|
_R16,
|
||||||
|
_R17,
|
||||||
|
_R18,
|
||||||
|
_R23, /* arg3 */
|
||||||
|
_R24, /* arg2 */
|
||||||
|
_R25, /* arg1 */
|
||||||
|
_R26, /* arg0 */
|
||||||
|
_R27, /* Data Pointer */
|
||||||
|
_R30, /* Stack Pointer */
|
||||||
|
_R31, /* Link register */
|
||||||
|
#define JIT_F0 _F12
|
||||||
|
#define JIT_F1 _F13
|
||||||
|
#define JIT_F2 _F14
|
||||||
|
#define JIT_F3 _F15
|
||||||
|
#define JIT_F4 _F16
|
||||||
|
#define JIT_F5 _F17
|
||||||
|
/* Caller Saves */
|
||||||
|
_F31,
|
||||||
|
_F30,
|
||||||
|
_F29,
|
||||||
|
_F28,
|
||||||
|
_F27,
|
||||||
|
_F26,
|
||||||
|
_F25,
|
||||||
|
_F24,
|
||||||
|
_F23,
|
||||||
|
_F22,
|
||||||
|
_F11,
|
||||||
|
_F10,
|
||||||
|
_F9,
|
||||||
|
_F8,
|
||||||
|
/* Arguments */
|
||||||
|
_F7, /* farg3 */
|
||||||
|
_F6, /* farg2 */
|
||||||
|
_F5, /* farg1 */
|
||||||
|
_F4, /* farg0 */
|
||||||
|
/* Callee Saves */
|
||||||
|
_F21,
|
||||||
|
_F20,
|
||||||
|
_F19,
|
||||||
|
_F18,
|
||||||
|
_F17,
|
||||||
|
_F16,
|
||||||
|
_F15,
|
||||||
|
_F14,
|
||||||
|
_F13,
|
||||||
|
_F12,
|
||||||
|
/* Floating-Pointer Status and Exception */
|
||||||
|
_F0,
|
||||||
|
_F1,
|
||||||
|
_F2,
|
||||||
|
_F3,
|
||||||
|
#define JIT_NOREG _NOREG
|
||||||
|
_NOREG,
|
||||||
|
} jit_reg_t;
|
||||||
|
|
||||||
|
typedef jit_int64_t jit_regset_t;
|
||||||
|
|
||||||
|
#endif /* _jit_hppa */
|
|
@ -77,6 +77,10 @@
|
||||||
# define JIT_SP _R12
|
# define JIT_SP _R12
|
||||||
# define JIT_RET _R8
|
# define JIT_RET _R8
|
||||||
# define JIT_FRET _F8
|
# define JIT_FRET _F8
|
||||||
|
#elif defined(__hppa__)
|
||||||
|
# define JIT_SP _R30
|
||||||
|
# define JIT_RET _R28
|
||||||
|
# define JIT_FRET _F4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define jit_size(vector) (sizeof(vector) / sizeof((vector)[0]))
|
#define jit_size(vector) (sizeof(vector) / sizeof((vector)[0]))
|
||||||
|
|
|
@ -28,6 +28,9 @@ EXTRA_DIST = \
|
||||||
jit_arm-cpu.c \
|
jit_arm-cpu.c \
|
||||||
jit_arm-swf.c \
|
jit_arm-swf.c \
|
||||||
jit_arm-vfp.c \
|
jit_arm-vfp.c \
|
||||||
|
jit_hppa.c \
|
||||||
|
jit_hppa-cpu.c \
|
||||||
|
jit_hppa-fpu.c \
|
||||||
jit_ia64.c \
|
jit_ia64.c \
|
||||||
jit_ia64-cpu.c \
|
jit_ia64-cpu.c \
|
||||||
jit_ia64-fpu.c \
|
jit_ia64-fpu.c \
|
||||||
|
|
|
@ -89,7 +89,7 @@ jit_init_debug(void)
|
||||||
# endif
|
# endif
|
||||||
# if defined(__sparc__)
|
# if defined(__sparc__)
|
||||||
disasm_info.endian = disasm_info.display_endian = BFD_ENDIAN_BIG;
|
disasm_info.endian = disasm_info.display_endian = BFD_ENDIAN_BIG;
|
||||||
#endif
|
# endif
|
||||||
disasm_info.print_address_func = disasm_print_address;
|
disasm_info.print_address_func = disasm_print_address;
|
||||||
|
|
||||||
if (bfd_get_file_flags(disasm_bfd) & HAS_SYMS) {
|
if (bfd_get_file_flags(disasm_bfd) & HAS_SYMS) {
|
||||||
|
|
2695
lib/jit_hppa-cpu.c
Normal file
2695
lib/jit_hppa-cpu.c
Normal file
File diff suppressed because it is too large
Load diff
924
lib/jit_hppa-fpu.c
Normal file
924
lib/jit_hppa-fpu.c
Normal file
|
@ -0,0 +1,924 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2013 Free Software Foundation, Inc.
|
||||||
|
*
|
||||||
|
* This is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Paulo Cesar Pereira de Andrade
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if PROTO
|
||||||
|
#define f39(o,b,x,t) _f39(_jit,o,b,x,t)
|
||||||
|
static void _f39(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define f40(o,b,x,r) _f40(_jit,o,b,x,r)
|
||||||
|
static void _f40(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define f41(o,b,x,t) _f41(_jit,o,b,x,t)
|
||||||
|
static void _f41(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define f42(o,b,i,r) _f42(_jit,o,b,i,r)
|
||||||
|
static void _f42(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define f43(o,b,t,i) f1(o,b,t,i)
|
||||||
|
#define f45(o,r,a,b,fmt,c,d,e,t) _f45(_jit,o,r,a,b,fmt,c,d,e,t)
|
||||||
|
static void _f45(jit_state_t*,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused;
|
||||||
|
#define f46(o,r,a,s,df,sf,b,c,d,t) _f46(_jit,o,r,a,s,df,sf,b,c,d,t)
|
||||||
|
static void _f46(jit_state_t*,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define f47(o,r1,r2,a,fmt,b,c,d,t) f47_48(o,r1,r2,a,fmt,b,c,d,t)
|
||||||
|
#define f48(o,r1,r2,a,fmt,b,c,d,t) f47_48(o,r1,r2,a,fmt,b,c,d,t)
|
||||||
|
#define f47_48(o,r1,r2,y,fmt,b,c,d,t) _f47_48(_jit,o,r1,r2,y,fmt,b,c,d,t)
|
||||||
|
static void _f47_48(jit_state_t*,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define f49(o,r,a,b,c,f,d,e,g,h,i,t) f49_52(o,r,a,b,c,f,d,e,g,h,i,t)
|
||||||
|
#define f51(o,r1,r2,y,a,f,b,d,e,g,h,c) f49_52(o,r1,r2,y,a,f,b,d,e,g,h,c)
|
||||||
|
#define f52(o,r1,r2,a,b,f,c,d,e,g,h,t) f49_52(o,r1,r2,a,b,f,c,d,e,g,h,t)
|
||||||
|
#define f49_52(o,r1,r2,y,v,f,a,b,u,c,d,t) _f49_52(_jit,o,r1,r2,y,v,f,a,b,u,c,d,t)
|
||||||
|
static void _f49_52(jit_state_t*,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define f53(o,r1,r2,ta,ra,f,tm) _f53(_jit,o,r1,r2,ta,ra,f,tm)
|
||||||
|
static void _f53(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused;
|
||||||
|
#define f54(o,r1,r2,a,b,f,c,d,e,g,t) _f54(_jit,o,r1,r2,a,b,f,c,d,e,g,t)
|
||||||
|
static void _f54(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t,jit_int32_t) maybe_unused;
|
||||||
|
#define FABS_(f,r,t) f49(0xe,r,0,3,0,f,0,0,0,0,0,t)
|
||||||
|
#define FABS_S(r,t) FABS_(0,r,t)
|
||||||
|
#define FABS_D(r,t) FABS_(1,r,t)
|
||||||
|
#define FABS_Q(r,t) f45(0xc,r,0,3,3,0,0,0,t)
|
||||||
|
#define FADD_(f,r1,r2,t) f52(0xe,r1,r2,0,0,f,3,0,0,0,0,t)
|
||||||
|
#define FADD_S(r1,r2,t) FADD_(0,r1,r2,t)
|
||||||
|
#define FADD_D(r1,r2,t) FADD_(1,r1,r2,t)
|
||||||
|
#define FADD_Q(r1,r2,t) f48(0xc,r1,r2,0,3,3,0,0,t)
|
||||||
|
#define FPSR_GT 1
|
||||||
|
#define FPSR_LT 2
|
||||||
|
#define FPSR_EQ 4
|
||||||
|
#define FPSR_UN 8
|
||||||
|
/*
|
||||||
|
Actually these are reversed, but easier for the FTEST after the FCMP
|
||||||
|
fcmp,dbl,false? fr4,fr12 0
|
||||||
|
fcmp,dbl,false fr4,fr12 1
|
||||||
|
fcmp,dbl,? fr4,fr12 2
|
||||||
|
fcmp,dbl,!<=> fr4,fr12 3 ORD
|
||||||
|
fcmp,dbl,= fr4,fr12 4 NE
|
||||||
|
fcmp,dbl,=t fr4,fr12 5
|
||||||
|
fcmp,dbl,?= fr4,fr12 6
|
||||||
|
fcmp,dbl,!<> fr4,fr12 7 LTGT
|
||||||
|
fcmp,dbl,!?>= fr4,fr12 8
|
||||||
|
fcmp,dbl,< fr4,fr12 9 UNGE
|
||||||
|
fcmp,dbl,?< fr4,fr12 10
|
||||||
|
fcmp,dbl,!>= fr4,fr12 11 GE
|
||||||
|
fcmp,dbl,!?> fr4,fr12 12
|
||||||
|
fcmp,dbl,<= fr4,fr12 13 UNGT
|
||||||
|
fcmp,dbl,?<= fr4,fr12 14
|
||||||
|
fcmp,dbl,!> fr4,fr12 15 GT
|
||||||
|
fcmp,dbl,!?<= fr4,fr12 16
|
||||||
|
fcmp,dbl,> fr4,fr12 17 UNLE
|
||||||
|
fcmp,dbl,?> fr4,fr12 18
|
||||||
|
fcmp,dbl,!<= fr4,fr12 19 LE
|
||||||
|
fcmp,dbl,!?< fr4,fr12 20
|
||||||
|
fcmp,dbl,>= fr4,fr12 21 UNLT
|
||||||
|
fcmp,dbl,?>= fr4,fr12 22
|
||||||
|
fcmp,dbl,!< fr4,fr12 23 LT
|
||||||
|
fcmp,dbl,!?= fr4,fr12 24
|
||||||
|
fcmp,dbl,<> fr4,fr12 25 UNEQ
|
||||||
|
fcmp,dbl,!= fr4,fr12 26 EQ
|
||||||
|
fcmp,dbl,!=t fr4,fr12 27
|
||||||
|
fcmp,dbl,!? fr4,fr12 28
|
||||||
|
fcmp,dbl,<=> fr4,fr12 29 UNORD
|
||||||
|
fcmp,dbl,true? fr4,fr12 30
|
||||||
|
fcmp,dbl,true fr4,fr12 31
|
||||||
|
*/
|
||||||
|
#define FCMP_LT 23
|
||||||
|
#define FCMP_LE 19
|
||||||
|
#define FCMP_EQ 26
|
||||||
|
#define FCMP_GE 11
|
||||||
|
#define FCMP_GT 15
|
||||||
|
#define FCMP_NE 4
|
||||||
|
#define FCMP_UNLT 21
|
||||||
|
#define FCMP_UNLE 17
|
||||||
|
#define FCMP_UNEQ 25
|
||||||
|
#define FCMP_UNGE 9
|
||||||
|
#define FCMP_UNGT 13
|
||||||
|
#define FCMP_LTGT 7
|
||||||
|
#define FCMP_ORD 3
|
||||||
|
#define FCMP_UNORD 29
|
||||||
|
#define FCMP_(f,r1,r2,c) f51(0xe,r1,r2,0,0,f,2,0,0,0,0,c)
|
||||||
|
#define FCMP_S_(r1,r2,c) FCMP_(0,r1,r2,c)
|
||||||
|
#define FCMP_D_(r1,r2,c) FCMP_(1,r1,r2,c)
|
||||||
|
#define FCMP_Q_(r1,r2,c) f47(0xc,r1,r2,0,3,2,0,0,c)
|
||||||
|
#define FCMP_S_LT(r1,r2) FCMP_S_(r1,r2,FCMP_LT)
|
||||||
|
#define FCMP_D_LT(r1,r2) FCMP_D_(r1,r2,FCMP_LT)
|
||||||
|
#define FCMP_Q_LT(r1,r2) FCMP_Q_(r1,r2,FCMP_LT)
|
||||||
|
#define FCMP_S_LE(r1,r2) FCMP_S_(r1,r2,FCMP_LE)
|
||||||
|
#define FCMP_D_LE(r1,r2) FCMP_D_(r1,r2,FCMP_LE)
|
||||||
|
#define FCMP_Q_LE(r1,r2) FCMP_Q_(r1,r2,FCMP_LE)
|
||||||
|
#define FCMP_S_EQ(r1,r2) FCMP_S_(r1,r2,FCMP_EQ)
|
||||||
|
#define FCMP_D_EQ(r1,r2) FCMP_D_(r1,r2,FCMP_EQ)
|
||||||
|
#define FCMP_Q_EQ(r1,r2) FCMP_Q_(r1,r2,FCMP_EQ)
|
||||||
|
#define FCMP_S_GE(r1,r2) FCMP_S_(r1,r2,FCMP_GE)
|
||||||
|
#define FCMP_D_GE(r1,r2) FCMP_D_(r1,r2,FCMP_GE)
|
||||||
|
#define FCMP_Q_GE(r1,r2) FCMP_Q_(r1,r2,FCMP_GE)
|
||||||
|
#define FCMP_S_GT(r1,r2) FCMP_S_(r1,r2,FCMP_GT)
|
||||||
|
#define FCMP_D_GT(r1,r2) FCMP_D_(r1,r2,FCMP_GT)
|
||||||
|
#define FCMP_Q_GT(r1,r2) FCMP_Q_(r1,r2,FCMP_GT)
|
||||||
|
#define FCMP_S_NE(r1,r2) FCMP_S_(r1,r2,FCMP_NE)
|
||||||
|
#define FCMP_D_NE(r1,r2) FCMP_D_(r1,r2,FCMP_NE)
|
||||||
|
#define FCMP_Q_NE(r1,r2) FCMP_Q_(r1,r2,FCMP_NE)
|
||||||
|
#define FCMP_S_UNLT(r1,r2) FCMP_S_(r1,r2,FCMP_UNLT)
|
||||||
|
#define FCMP_D_UNLT(r1,r2) FCMP_D_(r1,r2,FCMP_UNLT)
|
||||||
|
#define FCMP_Q_UNLT(r1,r2) FCMP_Q_(r1,r2,FCMP_UNLT)
|
||||||
|
#define FCMP_S_UNLE(r1,r2) FCMP_S_(r1,r2,FCMP_UNLE)
|
||||||
|
#define FCMP_D_UNLE(r1,r2) FCMP_D_(r1,r2,FCMP_UNLE)
|
||||||
|
#define FCMP_Q_UNLE(r1,r2) FCMP_Q_(r1,r2,FCMP_UNLE)
|
||||||
|
#define FCMP_S_UNEQ(r1,r2) FCMP_S_(r1,r2,FCMP_UNEQ)
|
||||||
|
#define FCMP_D_UNEQ(r1,r2) FCMP_D_(r1,r2,FCMP_UNEQ)
|
||||||
|
#define FCMP_Q_UNEQ(r1,r2) FCMP_Q_(r1,r2,FCMP_UNEQ)
|
||||||
|
#define FCMP_S_UNGE(r1,r2) FCMP_S_(r1,r2,FCMP_UNGE)
|
||||||
|
#define FCMP_D_UNGE(r1,r2) FCMP_D_(r1,r2,FCMP_UNGE)
|
||||||
|
#define FCMP_Q_UNGE(r1,r2) FCMP_Q_(r1,r2,FCMP_UNGE)
|
||||||
|
#define FCMP_S_UNGT(r1,r2) FCMP_S_(r1,r2,FCMP_UNGT)
|
||||||
|
#define FCMP_D_UNGT(r1,r2) FCMP_D_(r1,r2,FCMP_UNGT)
|
||||||
|
#define FCMP_Q_UNGT(r1,r2) FCMP_Q_(r1,r2,FCMP_UNGT)
|
||||||
|
#define FCMP_S_LTGT(r1,r2) FCMP_S_(r1,r2,FCMP_LTGT)
|
||||||
|
#define FCMP_D_LTGT(r1,r2) FCMP_D_(r1,r2,FCMP_LTGT)
|
||||||
|
#define FCMP_Q_LTGT(r1,r2) FCMP_Q_(r1,r2,FCMP_LTGT)
|
||||||
|
#define FCMP_S_ORD(r1,r2) FCMP_S_(r1,r2,FCMP_ORD)
|
||||||
|
#define FCMP_D_ORD(r1,r2) FCMP_D_(r1,r2,FCMP_ORD)
|
||||||
|
#define FCMP_Q_ORD(r1,r2) FCMP_Q_(r1,r2,FCMP_ORD)
|
||||||
|
#define FCMP_S_UNORD(r1,r2) FCMP_S_(r1,r2,FCMP_UNORD)
|
||||||
|
#define FCMP_D_UNORD(r1,r2) FCMP_D_(r1,r2,FCMP_UNORD)
|
||||||
|
#define FCMP_Q_UNORD(r1,r2) FCMP_Q_(r1,r2,FCMP_UNORD)
|
||||||
|
#define XFNVFF(s,d,r,t) f46(0xc,r,0,0,d,s,1,0,0,t)
|
||||||
|
#define FCNVFF_Q_S(r,t) XFNVFF(3,0,r,t)
|
||||||
|
#define FCNVFF_Q_D(r,t) XFNVFF(3,1,r,t)
|
||||||
|
#define FCNVFF_S_Q(r,t) XFNVFF(0,3,r,t)
|
||||||
|
#define FCNVFF_D_Q(r,t) XFNVFF(1,3,r,t)
|
||||||
|
#define FCNVFF_(s,d,r,t) f46(0xc,r,0,0,d,s,1,0,0,t)
|
||||||
|
#define FCNVFF_S_D(r,t) FCNVFF_(0,1,r,t)
|
||||||
|
#define FCNVFF_D_S(r,t) FCNVFF_(1,0,r,t)
|
||||||
|
#define FCNVXF_(s,d,r,t) f46(0xc,r,0,1,d,s,1,0,0,t)
|
||||||
|
#define FCNVXF_S_S(r,t) FCNVXF_(0,0,r,t)
|
||||||
|
#define FCNVXF_S_D(r,t) FCNVXF_(0,1,r,t)
|
||||||
|
#define FCNVXT_(s,d,r,t) f46(0xc,r,0,3,d,s,1,0,0,t)
|
||||||
|
#define FCNVXT_S_S(r,t) FCNVXT_(0,0,r,t)
|
||||||
|
#define FCNVXT_D_S(r,t) FCNVXT_(1,0,r,t)
|
||||||
|
#define FCPY_(f,r,t) f49(0xe,r,0,2,0,f,0,0,0,0,0,t)
|
||||||
|
#define FCPY_S(r,t) FCPY_(0,r,t)
|
||||||
|
#define FCPY_D(r,t) FCPY_(1,r,t)
|
||||||
|
#define FCPY_Q(r,t) f45(0xc,r,0,2,2,0,0,0,t)
|
||||||
|
#define FDIV_(f,r1,r2,t) f52(0xe,r1,r2,3,0,f,3,0,0,0,0,t)
|
||||||
|
#define FDIV_S(r1,r2,t) FDIV_(0,r1,r2,t)
|
||||||
|
#define FDIV_D(r1,r2,t) FDIV_(1,r1,r2,t)
|
||||||
|
#define FDIV_Q(r1,r2,t) f48(0xc,r1,r2,3,3,3,0,0,t)
|
||||||
|
#define FID() f45(0xc,0,0,0,2,0,0,0,0)
|
||||||
|
#define FLDDL(i,b,t) f3(0x14,b,t,i,1)
|
||||||
|
#define FLDD(x,b,t) f39(0xb,b,x,t)
|
||||||
|
#define FLDDI(i,b,t) f41(0xb,b,i,t)
|
||||||
|
#define FLDWL(i,b,t) f43(0x17,b,t,i)
|
||||||
|
#define FLDW(x,b,t) f39(0x9,b,x,t)
|
||||||
|
#define FLDWI(i,b,t) f41(0x9,b,i,t)
|
||||||
|
#define FMPY_(f,r1,r2,t) f52(0xe,r1,r2,2,0,f,3,0,0,0,0,t)
|
||||||
|
#define FMPY_S(r1,r2,t) FMPY_(0,r1,r2,t)
|
||||||
|
#define FMPY_D(r1,r2,t) FMPY_(1,r1,r2,t)
|
||||||
|
#define FMPY_Q(r1,r2,t) f48(0xc,r1,r2,2,3,3,0,0,t)
|
||||||
|
/* FIXME not disassembled */
|
||||||
|
#define FMPYADD_(f,r1,r2,ta,ra,tm) f53(0x6,r1,r2,ta,ra,f,tm)
|
||||||
|
#define FMPYADD_S(r1,r2,ta,ra,tm) FMPYADD_(0,r1,r2,ta,ra,tm)
|
||||||
|
#define FMPYADD_D(r1,r2,ta,ra,tm) FMPYADD_(1,r1,r2,ta,ra,tm)
|
||||||
|
#define FMPYFADD_(f,r1,r2,ra,t) f54(0x2e,r1,r2,ra>>3,0,f,(ra)&7,0,0,0,t)
|
||||||
|
#define FMPYFADD_S(r1,r2,ra,t) FMPYFADD_(0,r1,r2,ra,t)
|
||||||
|
#define FMPYFADD_D(r1,r2,ra,t) FMPYFADD_(1,r1,r2,ra,t)
|
||||||
|
#define FMPYNFADD_(f,r1,r2,ra,t) f54(0x2e,r1,r2,ra>>3,0,f,(ra)&7,0,0,1,t)
|
||||||
|
#define FMPYNFADD_S(r1,r2,ra,t) FMPYNFADD_(0,r1,r2,ra,t)
|
||||||
|
#define FMPYNFADD_D(r1,r2,ra,t) FMPYNFADD_(1,r1,r2,ra,t)
|
||||||
|
#define FMPYSUB_(f,r1,r2,ta,ra,tm) f53(0x26,r1,r2,ta,ra,f,tm)
|
||||||
|
#define FMPYSUB_S(r1,r2,ta,ra,tm) FMPYSUB_(0,r1,r2,ta,ra,tm)
|
||||||
|
#define FMPYSUB_D(r1,r2,ta,ra,tm) FMPYSUB_(1,r1,r2,ta,ra,tm)
|
||||||
|
#define FNEG_(f,r,t) f49(0xe,r,0,6,0,f,0,0,0,0,0,t)
|
||||||
|
#define FNEG_S(r,t) FNEG_(0,r,t)
|
||||||
|
#define FNEG_D(r,t) FNEG_(1,r,t)
|
||||||
|
/* FIXME not disassembled */
|
||||||
|
#define FNEG_Q(r,t) f45(0xc,r,0,6,3,0,0,0,t)
|
||||||
|
#define FNEGABS_(f,r,t) f49(0xe,r,0,7,0,f,0,0,0,0,0,t)
|
||||||
|
#define FNEGABS_S(r,t) FNEGABS_(0,r,t)
|
||||||
|
#define FNEGABS_D(r,t) FNEGABS_(1,r,t)
|
||||||
|
#define FNEGABS_Q(r,t) f45(0xc,r,0,7,3,0,0,0,t)
|
||||||
|
#define FRND_(f,r,t) f49(0xe,r,0,5,0,f,0,0,0,0,0,t)
|
||||||
|
#define FRND_S(r,t) FRND_(0,r,t)
|
||||||
|
#define FRND_D(r,t) FRND_(1,r,t)
|
||||||
|
#define FRND_Q(r,t) f45(0xc,r,0,5,3,0,0,0,t)
|
||||||
|
#define FSQRT_(f,r,t) f49(0xe,r,0,4,0,f,0,0,0,0,0,t)
|
||||||
|
#define FSQRT_S(r,t) FSQRT_(0,r,t)
|
||||||
|
#define FSQRT_D(r,t) FSQRT_(1,r,t)
|
||||||
|
#define FSQRT_Q(r,t) f45(0xc,r,0,4,3,0,0,0,t)
|
||||||
|
#define FSTDL(r,i,b) f3(0x1c,b,r,i,1)
|
||||||
|
#define FSTD(r,x,b) f40(0xb,b,x,r)
|
||||||
|
#define FSTDI(r,i,b) f42(0xb,b,i,r)
|
||||||
|
#define FSTWL(r,i,b) f43(0x1f,b,r,i)
|
||||||
|
#define FSTW(r,x,b) f40(0x9,b,x,r)
|
||||||
|
#define FSTWI(r,i,b) f42(0x9,b,i,r)
|
||||||
|
#define FSUB_(f,r1,r2,t) f52(0xe,r1,r2,1,0,f,3,0,0,0,0,t)
|
||||||
|
#define FSUB_S(r1,r2,t) FSUB_(0,r1,r2,t)
|
||||||
|
#define FSUB_D(r1,r2,t) FSUB_(1,r1,r2,t)
|
||||||
|
#define FSUB_Q(r1,r2,t) f48(0xc,r1,r2,1,3,3,0,0,t)
|
||||||
|
#define FTEST_(c) f47(0xc,0,0,0,0,2,0,1,c)
|
||||||
|
#define FTEST() f47(0xc,0,0,1,0,2,0,1,0)
|
||||||
|
#define FTEST_LT() FTEST_(FCMP_LT)
|
||||||
|
#define FTEST_LE() FTEST_(FCMP_LE)
|
||||||
|
#define FTEST_EQ() FTEST_(FCMP_EQ)
|
||||||
|
#define FTEST_GE() FTEST_(FCMP_GE)
|
||||||
|
#define FTEST_GT() FTEST_(FCMP_GT)
|
||||||
|
#define FTEST_NE() FTEST_(FCMP_NE)
|
||||||
|
#define FTEST_UNLT() FTEST_(FCMP_UNLT)
|
||||||
|
#define FTEST_UNLE() FTEST_(FCMP_UNLE)
|
||||||
|
#define FTEST_UNEQ() FTEST_(FCMP_UNEQ)
|
||||||
|
#define FTEST_UNGE() FTEST_(FCMP_UNGE)
|
||||||
|
#define FTEST_UNGT() FTEST_(FCMP_UNGT)
|
||||||
|
#define FTEST_LTGT() FTEST_(FCMP_LTGT)
|
||||||
|
#define FTEST_ORD() FTEST_(FCMP_ORD)
|
||||||
|
#define FTEST_UNORD() FTEST_(FCMP_UNORD)
|
||||||
|
#define XMPYU(r1,r2,t) f52(0xe,r1,r2,2,0,0,3,1,0,0,0,t)
|
||||||
|
#define XMPYU_L_R(r1,r2,t) f52(0xe,r1,r2,2,1,0,3,1,0,0,0,t)
|
||||||
|
#define XMPYU_R_L(r1,r2,t) f52(0xe,r1,r2,2,0,0,3,1,1,0,0,t)
|
||||||
|
#define XMPYU_R_R(r1,r2,t) f52(0xe,r1,r2,2,1,0,3,1,1,0,0,t)
|
||||||
|
#define negr_f(r0,r1) FNEG_S(r1,r0)
|
||||||
|
#define negr_d(r0,r1) FNEG_D(r1,r0)
|
||||||
|
#define sqrtr_f(r0,r1) FSQRT_S(r1,r0)
|
||||||
|
#define sqrtr_d(r0,r1) FSQRT_D(r1,r0)
|
||||||
|
#define extr_f(r0,r1) _extr_f(_jit,r0,r1)
|
||||||
|
static void _extr_f(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
|
#define extr_d(r0,r1) _extr_d(_jit,r0,r1)
|
||||||
|
static void _extr_d(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
|
#define extr_f_d(r0,r1) FCNVFF_S_D(r1,r0)
|
||||||
|
#define extr_d_f(r0,r1) FCNVFF_D_S(r1,r0)
|
||||||
|
#define truncr_f(r0,r1) truncr_f_i(r0,r1)
|
||||||
|
#define truncr_f_i(r0,r1) _truncr_f_i(_jit,r0,r1)
|
||||||
|
static void _truncr_f_i(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
|
#define truncr_d(r0,r1) truncr_d_i(r0,r1)
|
||||||
|
#define truncr_d_i(r0,r1) _truncr_d_i(_jit,r0,r1)
|
||||||
|
static void _truncr_d_i(jit_state_t*,jit_int32_t,jit_int32_t);
|
||||||
|
#define movr_f(r0,r1) FCPY_S(r1,r0)
|
||||||
|
#define movi_f(r0,i0) _movi_f(_jit,r0,i0)
|
||||||
|
static void _movi_f(jit_state_t*,jit_int32_t,jit_float32_t*);
|
||||||
|
#define movr_d(r0,r1) FCPY_D(r1,r0)
|
||||||
|
#define movi_d(r0,i0) _movi_d(_jit,r0,i0)
|
||||||
|
static void _movi_d(jit_state_t*,jit_int32_t,jit_float64_t*);
|
||||||
|
#define absr_f(r0,r1) FABS_S(r1,r0)
|
||||||
|
#define absr_d(r0,r1) FABS_D(r1,r0)
|
||||||
|
#define addr_f(r0,r1,r2) FADD_S(r1,r2,r0)
|
||||||
|
#define addi_f(r0,r1,i0) _addi_f(_jit,r0,r1,i0)
|
||||||
|
static void _addi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||||
|
#define addr_d(r0,r1,r2) FADD_D(r1,r2,r0)
|
||||||
|
#define addi_d(r0,r1,i0) _addi_d(_jit,r0,r1,i0)
|
||||||
|
static void _addi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||||
|
#define subr_f(r0,r1,r2) FSUB_S(r1,r2,r0)
|
||||||
|
#define subi_f(r0,r1,i0) _subi_f(_jit,r0,r1,i0)
|
||||||
|
static void _subi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||||
|
#define subr_d(r0,r1,r2) FSUB_D(r1,r2,r0)
|
||||||
|
#define subi_d(r0,r1,i0) _subi_d(_jit,r0,r1,i0)
|
||||||
|
static void _subi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||||
|
#define mulr_f(r0,r1,r2) FMPY_S(r1,r2,r0)
|
||||||
|
#define muli_f(r0,r1,i0) _muli_f(_jit,r0,r1,i0)
|
||||||
|
static void _muli_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||||
|
#define mulr_d(r0,r1,r2) FMPY_D(r1,r2,r0)
|
||||||
|
#define muli_d(r0,r1,i0) _muli_d(_jit,r0,r1,i0)
|
||||||
|
static void _muli_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||||
|
#define divr_f(r0,r1,r2) FDIV_S(r1,r2,r0)
|
||||||
|
#define divi_f(r0,r1,i0) _divi_f(_jit,r0,r1,i0)
|
||||||
|
static void _divi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||||
|
#define divr_d(r0,r1,r2) FDIV_D(r1,r2,r0)
|
||||||
|
#define divi_d(r0,r1,i0) _divi_d(_jit,r0,r1,i0)
|
||||||
|
static void _divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||||
|
#define cmpr_f(c,r0,r1,r2) _cmpr_f(_jit,c,r0,r1,r2)
|
||||||
|
static void _cmpr_f(jit_state_t*,jit_word_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define cmpi_f(c,r0,r1,i0) _cmpi_f(_jit,c,r0,r1,i0)
|
||||||
|
static void _cmpi_f(jit_state_t*,jit_word_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_float32_t*);
|
||||||
|
#define cmpr_d(c,r0,r1,r2) _cmpr_d(_jit,c,r0,r1,r2)
|
||||||
|
static void _cmpr_d(jit_state_t*,jit_word_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define cmpi_d(c,r0,r1,i0) _cmpi_d(_jit,c,r0,r1,i0)
|
||||||
|
static void _cmpi_d(jit_state_t*,jit_word_t,
|
||||||
|
jit_int32_t,jit_int32_t,jit_float64_t*);
|
||||||
|
#define ltr_f(r0,r1,r2) cmpr_f(FCMP_LT,r0,r1,r2)
|
||||||
|
#define lti_f(r0,r1,i0) cmpi_f(FCMP_LT,r0,r1,i0)
|
||||||
|
#define ltr_d(r0,r1,r2) cmpr_d(FCMP_LT,r0,r1,r2)
|
||||||
|
#define lti_d(r0,r1,i0) cmpi_d(FCMP_LT,r0,r1,i0)
|
||||||
|
#define ler_f(r0,r1,r2) cmpr_f(FCMP_LE,r0,r1,r2)
|
||||||
|
#define lei_f(r0,r1,i0) cmpi_f(FCMP_LE,r0,r1,i0)
|
||||||
|
#define ler_d(r0,r1,r2) cmpr_d(FCMP_LE,r0,r1,r2)
|
||||||
|
#define lei_d(r0,r1,i0) cmpi_d(FCMP_LE,r0,r1,i0)
|
||||||
|
#define eqr_f(r0,r1,r2) cmpr_f(FCMP_EQ,r0,r1,r2)
|
||||||
|
#define eqi_f(r0,r1,i0) cmpi_f(FCMP_EQ,r0,r1,i0)
|
||||||
|
#define eqr_d(r0,r1,r2) cmpr_d(FCMP_EQ,r0,r1,r2)
|
||||||
|
#define eqi_d(r0,r1,i0) cmpi_d(FCMP_EQ,r0,r1,i0)
|
||||||
|
#define ger_f(r0,r1,r2) cmpr_f(FCMP_GE,r0,r1,r2)
|
||||||
|
#define gei_f(r0,r1,i0) cmpi_f(FCMP_GE,r0,r1,i0)
|
||||||
|
#define ger_d(r0,r1,r2) cmpr_d(FCMP_GE,r0,r1,r2)
|
||||||
|
#define gei_d(r0,r1,i0) cmpi_d(FCMP_GE,r0,r1,i0)
|
||||||
|
#define gtr_f(r0,r1,r2) cmpr_f(FCMP_GT,r0,r1,r2)
|
||||||
|
#define gti_f(r0,r1,i0) cmpi_f(FCMP_GT,r0,r1,i0)
|
||||||
|
#define gtr_d(r0,r1,r2) cmpr_d(FCMP_GT,r0,r1,r2)
|
||||||
|
#define gti_d(r0,r1,i0) cmpi_d(FCMP_GT,r0,r1,i0)
|
||||||
|
#define ner_f(r0,r1,r2) cmpr_f(FCMP_NE,r0,r1,r2)
|
||||||
|
#define nei_f(r0,r1,i0) cmpi_f(FCMP_NE,r0,r1,i0)
|
||||||
|
#define ner_d(r0,r1,r2) cmpr_d(FCMP_NE,r0,r1,r2)
|
||||||
|
#define nei_d(r0,r1,i0) cmpi_d(FCMP_NE,r0,r1,i0)
|
||||||
|
#define unltr_f(r0,r1,r2) cmpr_f(FCMP_UNLT,r0,r1,r2)
|
||||||
|
#define unlti_f(r0,r1,i0) cmpi_f(FCMP_UNLT,r0,r1,i0)
|
||||||
|
#define unltr_d(r0,r1,r2) cmpr_d(FCMP_UNLT,r0,r1,r2)
|
||||||
|
#define unlti_d(r0,r1,i0) cmpi_d(FCMP_UNLT,r0,r1,i0)
|
||||||
|
#define unler_f(r0,r1,r2) cmpr_f(FCMP_UNLE,r0,r1,r2)
|
||||||
|
#define unlei_f(r0,r1,i0) cmpi_f(FCMP_UNLE,r0,r1,i0)
|
||||||
|
#define unler_d(r0,r1,r2) cmpr_d(FCMP_UNLE,r0,r1,r2)
|
||||||
|
#define unlei_d(r0,r1,i0) cmpi_d(FCMP_UNLE,r0,r1,i0)
|
||||||
|
#define uneqr_f(r0,r1,r2) cmpr_f(FCMP_UNEQ,r0,r1,r2)
|
||||||
|
#define uneqi_f(r0,r1,i0) cmpi_f(FCMP_UNEQ,r0,r1,i0)
|
||||||
|
#define uneqr_d(r0,r1,r2) cmpr_d(FCMP_UNEQ,r0,r1,r2)
|
||||||
|
#define uneqi_d(r0,r1,i0) cmpi_d(FCMP_UNEQ,r0,r1,i0)
|
||||||
|
#define unger_f(r0,r1,r2) cmpr_f(FCMP_UNGE,r0,r1,r2)
|
||||||
|
#define ungei_f(r0,r1,i0) cmpi_f(FCMP_UNGE,r0,r1,i0)
|
||||||
|
#define unger_d(r0,r1,r2) cmpr_d(FCMP_UNGE,r0,r1,r2)
|
||||||
|
#define ungei_d(r0,r1,i0) cmpi_d(FCMP_UNGE,r0,r1,i0)
|
||||||
|
#define ungtr_f(r0,r1,r2) cmpr_f(FCMP_UNGT,r0,r1,r2)
|
||||||
|
#define ungti_f(r0,r1,i0) cmpi_f(FCMP_UNGT,r0,r1,i0)
|
||||||
|
#define ungtr_d(r0,r1,r2) cmpr_d(FCMP_UNGT,r0,r1,r2)
|
||||||
|
#define ungti_d(r0,r1,i0) cmpi_d(FCMP_UNGT,r0,r1,i0)
|
||||||
|
#define ltgtr_f(r0,r1,r2) cmpr_f(FCMP_LTGT,r0,r1,r2)
|
||||||
|
#define ltgti_f(r0,r1,i0) cmpi_f(FCMP_LTGT,r0,r1,i0)
|
||||||
|
#define ltgtr_d(r0,r1,r2) cmpr_d(FCMP_LTGT,r0,r1,r2)
|
||||||
|
#define ltgti_d(r0,r1,i0) cmpi_d(FCMP_LTGT,r0,r1,i0)
|
||||||
|
#define ordr_f(r0,r1,r2) cmpr_f(FCMP_ORD,r0,r1,r2)
|
||||||
|
#define ordi_f(r0,r1,i0) cmpi_f(FCMP_ORD,r0,r1,i0)
|
||||||
|
#define ordr_d(r0,r1,r2) cmpr_d(FCMP_ORD,r0,r1,r2)
|
||||||
|
#define ordi_d(r0,r1,i0) cmpi_d(FCMP_ORD,r0,r1,i0)
|
||||||
|
#define unordr_f(r0,r1,r2) cmpr_f(FCMP_UNORD,r0,r1,r2)
|
||||||
|
#define unordi_f(r0,r1,i0) cmpi_f(FCMP_UNORD,r0,r1,i0)
|
||||||
|
#define unordr_d(r0,r1,r2) cmpr_d(FCMP_UNORD,r0,r1,r2)
|
||||||
|
#define unordi_d(r0,r1,i0) cmpi_d(FCMP_UNORD,r0,r1,i0)
|
||||||
|
#define ldr_f(r0,r1) FLDWI(0,r1,r0)
|
||||||
|
#define ldi_f(r0,i0) _ldi_f(_jit,r0,i0)
|
||||||
|
static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
|
||||||
|
#define ldxr_f(r0,r1,r2) FLDW(r2,r1,r0)
|
||||||
|
#define ldxi_f(r0,r1,i0) _ldxi_f(_jit,r0,r1,i0)
|
||||||
|
static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
|
||||||
|
#define ldr_d(r0,r1) FLDDI(0,r1,r0)
|
||||||
|
#define ldi_d(r0,i0) _ldi_d(_jit,r0,i0)
|
||||||
|
static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
|
||||||
|
#define ldxr_d(r0,r1,r2) FLDD(r2,r1,r0)
|
||||||
|
#define ldxi_d(r0,r1,i0) _ldxi_d(_jit,r0,r1,i0)
|
||||||
|
static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
|
||||||
|
#define str_f(r0,r1) FSTWI(r1,0,r0)
|
||||||
|
#define sti_f(i0,r0) _sti_f(_jit,i0,r0)
|
||||||
|
static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
|
||||||
|
#define stxr_f(r0,r1,r2) FSTW(r2,r1,r0)
|
||||||
|
#define stxi_f(i0,r0,r1) _stxi_f(_jit,i0,r0,r1)
|
||||||
|
static void _stxi_f(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define str_d(r0,r1) FSTDI(r1,0,r0)
|
||||||
|
#define sti_d(i0,r0) _sti_d(_jit,i0,r0)
|
||||||
|
static void _sti_d(jit_state_t*,jit_word_t,jit_int32_t);
|
||||||
|
#define stxr_d(r0,r1,r2) FSTD(r2,r1,r0)
|
||||||
|
#define stxi_d(i0,r0,r1) _stxi_d(_jit,i0,r0,r1)
|
||||||
|
static void _stxi_d(jit_state_t*,jit_word_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define bcmpr_f(c,i0,r0,r1) _bcmpr_f(_jit,c,i0,r0,r1)
|
||||||
|
static jit_word_t _bcmpr_f(jit_state_t*,jit_word_t,
|
||||||
|
jit_word_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define bcmpi_f(c,i0,r0,i1) _bcmpi_f(_jit,c,i0,r0,i1)
|
||||||
|
static jit_word_t _bcmpi_f(jit_state_t*,jit_word_t,
|
||||||
|
jit_word_t,jit_int32_t,jit_float32_t*);
|
||||||
|
#define bcmpr_d(c,i0,r0,r1) _bcmpr_d(_jit,c,i0,r0,r1)
|
||||||
|
static jit_word_t _bcmpr_d(jit_state_t*,jit_word_t,
|
||||||
|
jit_word_t,jit_int32_t,jit_int32_t);
|
||||||
|
#define bcmpi_d(c,i0,r0,i1) _bcmpi_d(_jit,c,i0,r0,i1)
|
||||||
|
static jit_word_t _bcmpi_d(jit_state_t*,jit_word_t,
|
||||||
|
jit_word_t,jit_int32_t,jit_float64_t*);
|
||||||
|
#define bltr_f(i0,r0,r1) bcmpr_f(FCMP_LT,i0,r0,r1)
|
||||||
|
#define blti_f(i0,r0,i1) bcmpi_f(FCMP_LT,i0,r0,i1)
|
||||||
|
#define bltr_d(i0,r0,r1) bcmpr_d(FCMP_LT,i0,r0,r1)
|
||||||
|
#define blti_d(i0,r0,i1) bcmpi_d(FCMP_LT,i0,r0,i1)
|
||||||
|
#define bler_f(i0,r0,r1) bcmpr_f(FCMP_LE,i0,r0,r1)
|
||||||
|
#define blei_f(i0,r0,i1) bcmpi_f(FCMP_LE,i0,r0,i1)
|
||||||
|
#define bler_d(i0,r0,r1) bcmpr_d(FCMP_LE,i0,r0,r1)
|
||||||
|
#define blei_d(i0,r0,i1) bcmpi_d(FCMP_LE,i0,r0,i1)
|
||||||
|
#define beqr_f(i0,r0,r1) bcmpr_f(FCMP_EQ,i0,r0,r1)
|
||||||
|
#define beqi_f(i0,r0,i1) bcmpi_f(FCMP_EQ,i0,r0,i1)
|
||||||
|
#define beqr_d(i0,r0,r1) bcmpr_d(FCMP_EQ,i0,r0,r1)
|
||||||
|
#define beqi_d(i0,r0,i1) bcmpi_d(FCMP_EQ,i0,r0,i1)
|
||||||
|
#define bger_f(i0,r0,r1) bcmpr_f(FCMP_GE,i0,r0,r1)
|
||||||
|
#define bgei_f(i0,r0,i1) bcmpi_f(FCMP_GE,i0,r0,i1)
|
||||||
|
#define bger_d(i0,r0,r1) bcmpr_d(FCMP_GE,i0,r0,r1)
|
||||||
|
#define bgei_d(i0,r0,i1) bcmpi_d(FCMP_GE,i0,r0,i1)
|
||||||
|
#define bgtr_f(i0,r0,r1) bcmpr_f(FCMP_GT,i0,r0,r1)
|
||||||
|
#define bgti_f(i0,r0,i1) bcmpi_f(FCMP_GT,i0,r0,i1)
|
||||||
|
#define bgtr_d(i0,r0,r1) bcmpr_d(FCMP_GT,i0,r0,r1)
|
||||||
|
#define bgti_d(i0,r0,i1) bcmpi_d(FCMP_GT,i0,r0,i1)
|
||||||
|
#define bner_f(i0,r0,r1) bcmpr_f(FCMP_NE,i0,r0,r1)
|
||||||
|
#define bnei_f(i0,r0,i1) bcmpi_f(FCMP_NE,i0,r0,i1)
|
||||||
|
#define bner_d(i0,r0,r1) bcmpr_d(FCMP_NE,i0,r0,r1)
|
||||||
|
#define bnei_d(i0,r0,i1) bcmpi_d(FCMP_NE,i0,r0,i1)
|
||||||
|
#define bunltr_f(i0,r0,r1) bcmpr_f(FCMP_UNLT,i0,r0,r1)
|
||||||
|
#define bunlti_f(i0,r0,i1) bcmpi_f(FCMP_UNLT,i0,r0,i1)
|
||||||
|
#define bunltr_d(i0,r0,r1) bcmpr_d(FCMP_UNLT,i0,r0,r1)
|
||||||
|
#define bunlti_d(i0,r0,i1) bcmpi_d(FCMP_UNLT,i0,r0,i1)
|
||||||
|
#define bunler_f(i0,r0,r1) bcmpr_f(FCMP_UNLE,i0,r0,r1)
|
||||||
|
#define bunlei_f(i0,r0,i1) bcmpi_f(FCMP_UNLE,i0,r0,i1)
|
||||||
|
#define bunler_d(i0,r0,r1) bcmpr_d(FCMP_UNLE,i0,r0,r1)
|
||||||
|
#define bunlei_d(i0,r0,i1) bcmpi_d(FCMP_UNLE,i0,r0,i1)
|
||||||
|
#define buneqr_f(i0,r0,r1) bcmpr_f(FCMP_UNEQ,i0,r0,r1)
|
||||||
|
#define buneqi_f(i0,r0,i1) bcmpi_f(FCMP_UNEQ,i0,r0,i1)
|
||||||
|
#define buneqr_d(i0,r0,r1) bcmpr_d(FCMP_UNEQ,i0,r0,r1)
|
||||||
|
#define buneqi_d(i0,r0,i1) bcmpi_d(FCMP_UNEQ,i0,r0,i1)
|
||||||
|
#define bunger_f(i0,r0,r1) bcmpr_f(FCMP_UNGE,i0,r0,r1)
|
||||||
|
#define bungei_f(i0,r0,i1) bcmpi_f(FCMP_UNGE,i0,r0,i1)
|
||||||
|
#define bunger_d(i0,r0,r1) bcmpr_d(FCMP_UNGE,i0,r0,r1)
|
||||||
|
#define bungei_d(i0,r0,i1) bcmpi_d(FCMP_UNGE,i0,r0,i1)
|
||||||
|
#define bungtr_f(i0,r0,r1) bcmpr_f(FCMP_UNGT,i0,r0,r1)
|
||||||
|
#define bungti_f(i0,r0,i1) bcmpi_f(FCMP_UNGT,i0,r0,i1)
|
||||||
|
#define bungtr_d(i0,r0,r1) bcmpr_d(FCMP_UNGT,i0,r0,r1)
|
||||||
|
#define bungti_d(i0,r0,i1) bcmpi_d(FCMP_UNGT,i0,r0,i1)
|
||||||
|
#define bltgtr_f(i0,r0,r1) bcmpr_f(FCMP_LTGT,i0,r0,r1)
|
||||||
|
#define bltgti_f(i0,r0,i1) bcmpi_f(FCMP_LTGT,i0,r0,i1)
|
||||||
|
#define bltgtr_d(i0,r0,r1) bcmpr_d(FCMP_LTGT,i0,r0,r1)
|
||||||
|
#define bltgti_d(i0,r0,i1) bcmpi_d(FCMP_LTGT,i0,r0,i1)
|
||||||
|
#define bordr_f(i0,r0,r1) bcmpr_f(FCMP_ORD,i0,r0,r1)
|
||||||
|
#define bordi_f(i0,r0,i1) bcmpi_f(FCMP_ORD,i0,r0,i1)
|
||||||
|
#define bordr_d(i0,r0,r1) bcmpr_d(FCMP_ORD,i0,r0,r1)
|
||||||
|
#define bordi_d(i0,r0,i1) bcmpi_d(FCMP_ORD,i0,r0,i1)
|
||||||
|
#define bunordr_f(i0,r0,r1) bcmpr_f(FCMP_UNORD,i0,r0,r1)
|
||||||
|
#define bunordi_f(i0,r0,i1) bcmpi_f(FCMP_UNORD,i0,r0,i1)
|
||||||
|
#define bunordr_d(i0,r0,r1) bcmpr_d(FCMP_UNORD,i0,r0,r1)
|
||||||
|
#define bunordi_d(i0,r0,i1) bcmpi_d(FCMP_UNORD,i0,r0,i1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CODE
|
||||||
|
static void
|
||||||
|
_f39(jit_state_t *_jit, jit_int32_t o,
|
||||||
|
jit_int32_t b, jit_int32_t x, jit_int32_t t)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(b & ~0x1f));
|
||||||
|
assert(!(x & ~0x1f));
|
||||||
|
assert(!(t & ~0x1f));
|
||||||
|
ii((o<<26)|(b<<21)|(x<<16)|t);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f40(jit_state_t *_jit, jit_int32_t o,
|
||||||
|
jit_int32_t b, jit_int32_t x, jit_int32_t r)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(b & ~0x1f));
|
||||||
|
assert(!(x & ~0x1f));
|
||||||
|
assert(!(r & ~0x1f));
|
||||||
|
ii((o<<26)|(b<<21)|(x<<16)|(1<<9)|r);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f41(jit_state_t *_jit, jit_int32_t o,
|
||||||
|
jit_int32_t b, jit_int32_t x, jit_int32_t t)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(b & ~0x1f));
|
||||||
|
assert(x >= -16 && x < 15);
|
||||||
|
assert(!(t & ~0x1f));
|
||||||
|
ii((o<<26)|(b<<21)|(low_sign_unext(x,5)<<16)|(1<<12)|t);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f42(jit_state_t *_jit, jit_int32_t o,
|
||||||
|
jit_int32_t b, jit_int32_t i, jit_int32_t r)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(b & ~0x1f));
|
||||||
|
assert(i >= -16 && i < 15);
|
||||||
|
assert(!(r & ~0x1f));
|
||||||
|
ii((o<<26)|(b<<21)|(low_sign_unext(i,5)<<16)|(1<<12)|(1<<9)|r);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f45(jit_state_t *_jit, jit_int32_t o,
|
||||||
|
jit_int32_t r, jit_int32_t a, jit_int32_t b, jit_int32_t fmt,
|
||||||
|
jit_int32_t c, jit_int32_t d, jit_int32_t e, jit_int32_t t)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(r & ~0x1f));
|
||||||
|
assert(!(a & ~0x1f));
|
||||||
|
assert(!(b & ~0x7));
|
||||||
|
assert(!(fmt & ~0x3));
|
||||||
|
assert(!(c & ~0x3));
|
||||||
|
assert(!(d & ~0x7));
|
||||||
|
assert(!(e & ~0x1));
|
||||||
|
assert(!(t & ~0x1f));
|
||||||
|
ii((o<<26)|(r<<21)|(a<<16)|(fmt<<13)|(b<<11)|(c<<9)|(d<<6)|(e<<5)|t);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f46(jit_state_t *_jit, jit_int32_t o, jit_int32_t r,
|
||||||
|
jit_int32_t a, jit_int32_t s, jit_int32_t df, jit_int32_t sf,
|
||||||
|
jit_int32_t b, jit_int32_t c, jit_int32_t d, jit_int32_t t)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(r & ~0x1f));
|
||||||
|
assert(!(a & ~0x7));
|
||||||
|
assert(!(s & ~0x7));
|
||||||
|
assert(!(df & ~0x3));
|
||||||
|
assert(!(sf & ~0x3));
|
||||||
|
assert(!(b & ~0x3));
|
||||||
|
assert(!(c & ~0x7));
|
||||||
|
assert(!(d & ~0x1));
|
||||||
|
assert(!(t & ~0x1f));
|
||||||
|
ii((o<<26)|(r<<21)|(a<<18)|(s<<15)|
|
||||||
|
(df<<13)|(sf<<11)|(b<<9)|(c<<6)|(d<<5)|t);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f47_48(jit_state_t *_jit, jit_int32_t o,
|
||||||
|
jit_int32_t r2, jit_int32_t r1, jit_int32_t y, jit_int32_t fmt,
|
||||||
|
jit_int32_t a, jit_int32_t b, jit_int32_t c, jit_int32_t t)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(r2 & ~0x1f));
|
||||||
|
assert(!(r1 & ~0x1f));
|
||||||
|
assert(!(y & ~0x7));
|
||||||
|
assert(!(fmt & ~0x3));
|
||||||
|
assert(!(a & ~0x3));
|
||||||
|
assert(!(b & ~0x7));
|
||||||
|
assert(!(c & ~0x1));
|
||||||
|
assert(!(t & ~0x1f));
|
||||||
|
ii((o<<26)|(r2<<21)|(r1<<16)|(y<<13)|(fmt<<11)|(a<<9)|(b<<6)|(c<<5)|t);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f49_52(jit_state_t *_jit, jit_int32_t o,
|
||||||
|
jit_int32_t r1, jit_int32_t r2, jit_int32_t y,
|
||||||
|
jit_int32_t v, jit_int32_t f, jit_int32_t a, jit_int32_t b,
|
||||||
|
jit_int32_t u, jit_int32_t c, jit_int32_t d, jit_int32_t t)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(r1 & ~0x1f));
|
||||||
|
assert(!(r2 & ~0x3f));
|
||||||
|
assert(!(y & ~0x7));
|
||||||
|
assert(!(v & ~0x1));
|
||||||
|
assert(!(f & ~0x1));
|
||||||
|
assert(!(a & ~0x3));
|
||||||
|
assert(!(b & ~0x1));
|
||||||
|
assert(!(u & ~0x1));
|
||||||
|
assert(!(c & ~0x1));
|
||||||
|
assert(!(d & ~0x1));
|
||||||
|
assert(!(t & ~0x1f));
|
||||||
|
ii((o<<26)|(r1<<21)|(r2<<16)|(y<<13)|(v<<12)|
|
||||||
|
(f<<11)|(a<<9)|(b<<8)|(u<<7)|(c<<6)|(d<<5)|t);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f53(jit_state_t *_jit, jit_int32_t o, jit_int32_t r1, jit_int32_t r2,
|
||||||
|
jit_int32_t ta, jit_int32_t ra, jit_int32_t f, jit_int32_t tm)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(r1 & ~0x1f));
|
||||||
|
assert(!(r2 & ~0x1f));
|
||||||
|
assert(!(ta & ~0x1f));
|
||||||
|
assert(!(ra & ~0x1f));
|
||||||
|
assert(!(f & ~0x1));
|
||||||
|
assert(!(tm & ~0x1f));
|
||||||
|
assert(ra != tm ||
|
||||||
|
(ta == r1 || ta == r2 || ta == tm) ||
|
||||||
|
(f && ra == 1) || (!f && !ra));
|
||||||
|
ii((o<<26)|(r1<<21)|(r2<<16)|(ta<<11)|(ra<<6)|(f<<5)|tm);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_f54(jit_state_t *_jit, jit_int32_t o, jit_int32_t r1, jit_int32_t r2,
|
||||||
|
jit_int32_t a, jit_int32_t b, jit_int32_t f, jit_int32_t c,
|
||||||
|
jit_int32_t d, jit_int32_t e, jit_int32_t g, jit_int32_t t)
|
||||||
|
{
|
||||||
|
assert(!(o & ~0x3f));
|
||||||
|
assert(!(r1 & ~0x1f));
|
||||||
|
assert(!(r2 & ~0x1f));
|
||||||
|
assert(!(a & ~0x7));
|
||||||
|
assert(!(b & ~0x1));
|
||||||
|
assert(!(f & ~0x1));
|
||||||
|
assert(!(c & ~0x7));
|
||||||
|
assert(!(e & ~0x1));
|
||||||
|
assert(!(e & ~0x1));
|
||||||
|
assert(!(g & ~0x1));
|
||||||
|
assert(!(t & ~0x1f));
|
||||||
|
ii((o<<26)|(r1<<21)|(r2<<16)|(a<<13)|
|
||||||
|
(b<<12)|(f<11)|(c<<8)|(d<<7)|(e<<6)|(g<<5)|t);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_extr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||||
|
{
|
||||||
|
stxi(alloca_offset - 8, _FP_REGNO, r1);
|
||||||
|
ldxi_f(r0, _FP_REGNO, alloca_offset - 8);
|
||||||
|
FCNVXF_S_S(r0, r0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_extr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||||
|
{
|
||||||
|
stxi(alloca_offset - 8, _FP_REGNO, r1);
|
||||||
|
ldxi_f(r0, _FP_REGNO, alloca_offset - 8);
|
||||||
|
FCNVXF_S_D(r0, r0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_truncr_f_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
reg = jit_get_reg(jit_class_fpr);
|
||||||
|
FCNVXT_S_S(r1, rn(reg));
|
||||||
|
stxi_f(alloca_offset - 8, _FP_REGNO, rn(reg));
|
||||||
|
ldxi(r0, _FP_REGNO, alloca_offset - 8);
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_truncr_d_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
reg = jit_get_reg(jit_class_fpr);
|
||||||
|
FCNVXT_D_S(r1, rn(reg));
|
||||||
|
stxi_d(alloca_offset - 8, _FP_REGNO, rn(reg));
|
||||||
|
ldxi(r0, _FP_REGNO, alloca_offset - 8);
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_movi_f(jit_state_t *_jit, jit_int32_t r0, jit_float32_t *i0)
|
||||||
|
{
|
||||||
|
ldi_f(r0, (jit_word_t)i0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_movi_d(jit_state_t *_jit, jit_int32_t r0, jit_float64_t *i0)
|
||||||
|
{
|
||||||
|
ldi_d(r0, (jit_word_t)i0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define fpr_opi(name, type, size) \
|
||||||
|
static void \
|
||||||
|
_##name##i_##type(jit_state_t *_jit, \
|
||||||
|
jit_int32_t r0, jit_int32_t r1, \
|
||||||
|
jit_float##size##_t *i0) \
|
||||||
|
{ \
|
||||||
|
jit_int32_t reg = jit_get_reg(jit_class_fpr); \
|
||||||
|
movi_##type(rn(reg), i0); \
|
||||||
|
name##r_##type(r0, r1, rn(reg)); \
|
||||||
|
jit_unget_reg(reg); \
|
||||||
|
}
|
||||||
|
#define fopi(name) fpr_opi(name, f, 32)
|
||||||
|
#define dopi(name) fpr_opi(name, d, 64)
|
||||||
|
|
||||||
|
fopi(add)
|
||||||
|
dopi(add)
|
||||||
|
fopi(sub)
|
||||||
|
dopi(sub)
|
||||||
|
fopi(mul)
|
||||||
|
dopi(mul)
|
||||||
|
fopi(div)
|
||||||
|
dopi(div)
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmpr_f(jit_state_t *_jit, jit_word_t c,
|
||||||
|
jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||||
|
{
|
||||||
|
LDI(0, r0);
|
||||||
|
FCMP_S_(r1, r2, c);
|
||||||
|
FTEST();
|
||||||
|
LDI(1, r0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmpi_f(jit_state_t *_jit, jit_word_t c,
|
||||||
|
jit_int32_t r0, jit_int32_t r1, jit_float32_t *i0)
|
||||||
|
{
|
||||||
|
jit_int32_t reg = jit_get_reg(jit_class_fpr);
|
||||||
|
movi_f(rn(reg), i0);
|
||||||
|
cmpr_f(c, r0, r1, rn(reg));
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmpr_d(jit_state_t *_jit, jit_word_t c,
|
||||||
|
jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
|
||||||
|
{
|
||||||
|
LDI(0, r0);
|
||||||
|
FCMP_D_(r1, r2, c);
|
||||||
|
FTEST();
|
||||||
|
LDI(1, r0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_cmpi_d(jit_state_t *_jit, jit_word_t c,
|
||||||
|
jit_int32_t r0, jit_int32_t r1, jit_float64_t *i0)
|
||||||
|
{
|
||||||
|
jit_int32_t reg = jit_get_reg(jit_class_fpr);
|
||||||
|
movi_d(rn(reg), i0);
|
||||||
|
cmpr_d(c, r0, r1, rn(reg));
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
assert(!(i0 & 3));
|
||||||
|
if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 6))
|
||||||
|
FLDWL(i0, _R0_REGNO, r0);
|
||||||
|
else {
|
||||||
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
|
movi(rn(reg), i0);
|
||||||
|
ldr_f(r0, rn(reg));
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
if (i0 >= -16 && i0 <= 15)
|
||||||
|
FLDWI(i0, r1, r0);
|
||||||
|
/* |im11a|0|t|i| */
|
||||||
|
else if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 6))
|
||||||
|
FLDWL(i0, r1, r0);
|
||||||
|
else {
|
||||||
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
|
movi(rn(reg), i0);
|
||||||
|
ldxr_f(r0, r1, rn(reg));
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
assert(!(i0 & 7));
|
||||||
|
if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 14))
|
||||||
|
FLDDL(i0, _R0_REGNO, r0);
|
||||||
|
else {
|
||||||
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
|
movi(rn(reg), i0);
|
||||||
|
ldr_d(r0, rn(reg));
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
if (i0 >= -16 && i0 <= 15)
|
||||||
|
FLDDI(i0, r1, r0);
|
||||||
|
/* |im10a|m|a|1|i| */
|
||||||
|
else if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 14))
|
||||||
|
FLDDL(i0, r1, r0);
|
||||||
|
else {
|
||||||
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
|
movi(rn(reg), i0);
|
||||||
|
ldxr_d(r0, r1, rn(reg));
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_sti_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
assert(!(i0 & 3));
|
||||||
|
if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 6))
|
||||||
|
FSTWL(r0, i0, _R0_REGNO);
|
||||||
|
else {
|
||||||
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
|
movi(rn(reg), i0);
|
||||||
|
str_f(rn(reg), r0);
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_stxi_f(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
if (i0 >= -16 && i0 <= 15)
|
||||||
|
FSTWI(r1, i0, r0);
|
||||||
|
/* |im11a|0|t|i| */
|
||||||
|
else if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 6))
|
||||||
|
FSTWL(r1, i0, r0);
|
||||||
|
else {
|
||||||
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
|
addi(rn(reg), r0, i0);
|
||||||
|
str_f(rn(reg), r1);
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_sti_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
assert(!(i0 & 7));
|
||||||
|
if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 14))
|
||||||
|
FSTDL(r0, i0, _R0_REGNO);
|
||||||
|
else {
|
||||||
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
|
movi(rn(reg), i0);
|
||||||
|
str_d(rn(reg), r0);
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
||||||
|
{
|
||||||
|
jit_int32_t reg;
|
||||||
|
if (i0 >= -16 && i0 <= 15)
|
||||||
|
FSTDI(r1, i0, r0);
|
||||||
|
/* |im10a|m|a|1|i| */
|
||||||
|
else if (i0 >= -8192 && i0 <= 8191 && !(re_assemble_16(i0) & 14))
|
||||||
|
FSTDL(r1, i0, r0);
|
||||||
|
else {
|
||||||
|
reg = jit_get_reg(jit_class_gpr);
|
||||||
|
movi(rn(reg), i0);
|
||||||
|
stxr_d(rn(reg), r0, r1);
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static jit_word_t
|
||||||
|
_bcmpr_f(jit_state_t *_jit, jit_word_t c,
|
||||||
|
jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
||||||
|
{
|
||||||
|
jit_word_t w;
|
||||||
|
FCMP_S_(r0, r1, c);
|
||||||
|
FTEST();
|
||||||
|
w = _jit->pc.w;
|
||||||
|
B_N(((i0 - w) >> 2) - 2, _R0_REGNO);
|
||||||
|
NOP();
|
||||||
|
return (w);
|
||||||
|
}
|
||||||
|
|
||||||
|
static jit_word_t
|
||||||
|
_bcmpi_f(jit_state_t *_jit, jit_word_t c,
|
||||||
|
jit_word_t i0, jit_int32_t r0, jit_float32_t *i1)
|
||||||
|
{
|
||||||
|
jit_word_t w;
|
||||||
|
jit_int32_t reg;
|
||||||
|
reg = jit_get_reg(jit_class_fpr);
|
||||||
|
movi_f(rn(reg), i1);
|
||||||
|
FCMP_S_(r0, rn(reg), c);
|
||||||
|
FTEST();
|
||||||
|
w = _jit->pc.w;
|
||||||
|
B_N(((i0 - w) >> 2) - 2, _R0_REGNO);
|
||||||
|
NOP();
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
return (w);
|
||||||
|
}
|
||||||
|
|
||||||
|
static jit_word_t
|
||||||
|
_bcmpr_d(jit_state_t *_jit, jit_word_t c,
|
||||||
|
jit_word_t i0, jit_int32_t r0, jit_int32_t r1)
|
||||||
|
{
|
||||||
|
jit_word_t w;
|
||||||
|
FCMP_D_(r0, r1, c);
|
||||||
|
FTEST();
|
||||||
|
w = _jit->pc.w;
|
||||||
|
B_N(((i0 - w) >> 2) - 2, _R0_REGNO);
|
||||||
|
NOP();
|
||||||
|
return (w);
|
||||||
|
}
|
||||||
|
|
||||||
|
static jit_word_t
|
||||||
|
_bcmpi_d(jit_state_t *_jit, jit_word_t c,
|
||||||
|
jit_word_t i0, jit_int32_t r0, jit_float64_t *i1)
|
||||||
|
{
|
||||||
|
jit_word_t w;
|
||||||
|
jit_int32_t reg;
|
||||||
|
reg = jit_get_reg(jit_class_fpr);
|
||||||
|
movi_d(rn(reg), i1);
|
||||||
|
FCMP_D_(r0, rn(reg), c);
|
||||||
|
FTEST();
|
||||||
|
w = _jit->pc.w;
|
||||||
|
B_N(((i0 - w) >> 2) - 2, _R0_REGNO);
|
||||||
|
NOP();
|
||||||
|
jit_unget_reg(reg);
|
||||||
|
return (w);
|
||||||
|
}
|
||||||
|
#endif
|
1186
lib/jit_hppa.c
Normal file
1186
lib/jit_hppa.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1460,9 +1460,17 @@ _jit_optimize(jit_state_t *_jit)
|
||||||
#endif
|
#endif
|
||||||
if (_jitc->function) {
|
if (_jitc->function) {
|
||||||
if ((mask & (jit_cc_a0_reg|jit_cc_a0_chg)) ==
|
if ((mask & (jit_cc_a0_reg|jit_cc_a0_chg)) ==
|
||||||
(jit_cc_a0_reg|jit_cc_a0_chg))
|
(jit_cc_a0_reg|jit_cc_a0_chg)) {
|
||||||
jit_regset_setbit(&_jitc->function->regset,
|
if (mask & jit_cc_a0_rlh) {
|
||||||
jit_regno(node->u.w));
|
jit_regset_setbit(&_jitc->function->regset,
|
||||||
|
jit_regno(node->u.q.l));
|
||||||
|
jit_regset_setbit(&_jitc->function->regset,
|
||||||
|
jit_regno(node->u.q.h));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
jit_regset_setbit(&_jitc->function->regset,
|
||||||
|
jit_regno(node->u.w));
|
||||||
|
}
|
||||||
if ((mask & (jit_cc_a1_reg|jit_cc_a1_chg)) ==
|
if ((mask & (jit_cc_a1_reg|jit_cc_a1_chg)) ==
|
||||||
(jit_cc_a1_reg|jit_cc_a1_chg))
|
(jit_cc_a1_reg|jit_cc_a1_chg))
|
||||||
jit_regset_setbit(&_jitc->function->regset,
|
jit_regset_setbit(&_jitc->function->regset,
|
||||||
|
@ -2869,4 +2877,6 @@ _patch_register(jit_state_t *_jit, jit_node_t *node, jit_node_t *link,
|
||||||
# include "jit_sparc.c"
|
# include "jit_sparc.c"
|
||||||
#elif defined(__ia64__)
|
#elif defined(__ia64__)
|
||||||
# include "jit_ia64.c"
|
# include "jit_ia64.c"
|
||||||
|
#elif defined(__hppa__)
|
||||||
|
# include "jit_hppa.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue