mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 21:10:27 +02:00
* check/float.tst: Add sparc to list of known NaN and +-Inf to integer conversion. * check/lightning.c: Define __sparc__ to preprocessor in the sparc backend. * include/lightning/jit_private.h: Correct wrong definition of emit_stxi_d, that has lived for a long time, but would cause problems whenever needing to spill/reload a float register. * include/lightning/jit_sparc.h: Can only use %g2,%g3,%g4 for scratch variables, as other "global" registers are reserved for the system, e.g. libc. Reorder float register naming to make it easier to access odd float registers, so that generating code for pusharg and getarg is easier for the IR. * lib/jit_mips-cpu.c, lib/jit_ppc-cpu.c: Update to match new code in jit_sparc-cpu.c. It must call jit_get_reg with jit_class_nospill if using the register to move an unconditional branch address to it, as the reload will not happen (actually could happen in the delay slot...) * lib/jit_sparc-cpu.c: Correct wrong macro definition for ldxr_s. Properly implement div* and implement rem. Div* needs to use the y register, and rem* needs to be synthesized. Correct b?sub* macro definitions. * lib/jit_sparc-fpu.c: Correct reversed float to/from double conversion. Correct wrong jit_get_reg call asking for a gpr and then using the fpr with that number. Correct wrong branch displacement computation for conditional branches. * lib/jit_sparc.c: Correct getarg_d and pushargi_d implementation. Add rem* entries to the switch converting IR to machine code. * lib/lightning.c: Correct a problem detected when adding the jit_class_nospill flag to jit_get_reg, that was caused when having a branch to an "epilog" node, what would cause the code to think all registers in unknown state were live, while in truth, all registers in unknown state in the "just after return" point are actually dead.
61 lines
1.6 KiB
C
61 lines
1.6 KiB
C
/*
|
|
* 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_sparc_h
|
|
#define _jit_sparc_h
|
|
|
|
#define JIT_HASH_CONSTS 1
|
|
#define JIT_NUM_OPERANDS 3
|
|
|
|
/*
|
|
* Types
|
|
*/
|
|
#define JIT_FP _FP
|
|
typedef enum {
|
|
#define jit_arg_reg_p(i) ((i) >= 0 && (i) < 6)
|
|
#define jit_r(i) (_G2 + (i))
|
|
#define jit_r_num() 3
|
|
#define jit_v(i) (_L0 + (i))
|
|
#define jit_v_num() 8
|
|
#define jit_arg_f_reg_p(i) ((i) >= 0 && (i) < 6)
|
|
#define jit_f(i) (_F0 + ((i) << 1))
|
|
#define jit_f_num() 8
|
|
#define JIT_R0 _G2
|
|
#define JIT_R1 _G3
|
|
#define JIT_R2 _G4
|
|
#define JIT_V0 _L0
|
|
#define JIT_V1 _L1
|
|
#define JIT_V2 _L2
|
|
_G0, _G1, _G2, _G3, _G4, _G5, _G6, _G7,
|
|
_O0, _O1, _O2, _O3, _O4, _O5, _SP, _O7,
|
|
_L0, _L1, _L2, _L3, _L4, _L5, _L6, _L7,
|
|
_I0, _I1, _I2, _I3, _I4, _I5, _FP, _I7,
|
|
#define JIT_F0 _F0
|
|
#define JIT_F1 _F2
|
|
#define JIT_F2 _F4
|
|
#define JIT_F3 _F6
|
|
#define JIT_F4 _F8
|
|
#define JIT_F5 _F10
|
|
_F0, _F1, _F2, _F3, _F4, _F5, _F6, _F7,
|
|
_F8, _F9, _F10, _F11, _F12, _F13, _F14, _F15,
|
|
#define JIT_NOREG _NOREG
|
|
_NOREG,
|
|
} jit_reg_t;
|
|
|
|
typedef jit_int64_t jit_regset_t;
|
|
|
|
#endif /* _jit_sparc_h */
|