mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-05 06:50:21 +02:00
New s390x port built on the hercules emulator and fedora 16 image.
* include/lightning/jit_s390x.h, lib/jit_s390x-cpu.c, lib/jit_s390x-fpu.c, lib/jit_s390x.c: New files implementing the new s390x port. * configure.ac, include/lightning.h, include/lightning/Makefile.am, include/lightning/jit_private.h, lib/Makefile.am, lib/jit_disasm.c, lib/lightning.c: Minor adaptation for the new s390x backend. * check/float.tst: Update for the s390x result of truncating +Inf to integer. * check/qalu_mul.tst: Add extra test cases to better test high word of signed multiplication as the result is adjust from unsigned multiplication on s390x.
This commit is contained in:
parent
a3891adb4b
commit
f6ee396ccb
14 changed files with 5994 additions and 2 deletions
19
ChangeLog
19
ChangeLog
|
@ -1,3 +1,22 @@
|
|||
2013-07-28 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* include/lightning/jit_s390x.h, lib/jit_s390x-cpu.c,
|
||||
lib/jit_s390x-fpu.c, lib/jit_s390x.c: New files
|
||||
implementing the new s390x port.
|
||||
|
||||
* configure.ac, include/lightning.h,
|
||||
include/lightning/Makefile.am,
|
||||
include/lightning/jit_private.h,
|
||||
lib/Makefile.am, lib/jit_disasm.c, lib/lightning.c:
|
||||
Minor adaptation for the new s390x backend.
|
||||
|
||||
* check/float.tst: Update for the s390x result of
|
||||
truncating +Inf to integer.
|
||||
|
||||
* check/qalu_mul.tst: Add extra test cases to better test
|
||||
high word of signed multiplication as the result is
|
||||
adjust from unsigned multiplication on s390x.
|
||||
|
||||
2013-07-28 Paulo Andrade <pcpa@gnu.org>
|
||||
|
||||
* check/lightning.c: Do not assume casting a double NaN or
|
||||
|
|
|
@ -21,7 +21,7 @@ ok:
|
|||
#else
|
||||
# define wnan x80
|
||||
#endif
|
||||
#if __mips__ || __arm__ || __ppc__ || __sparc__ || __hppa__ || __aarch64__
|
||||
#if __mips__ || __arm__ || __ppc__ || __sparc__ || __hppa__ || __aarch64__ || __s390x__
|
||||
# define wpinf x7f
|
||||
#else
|
||||
# define wpinf x80
|
||||
|
|
|
@ -12,10 +12,16 @@
|
|||
QMUL(4, 0x7ffff, 0x7ffff, 0xfff00001, 0x3f)
|
||||
UQMUL(5, 0xffffff, 0xffffff, 0xfe000001, 0xffff)
|
||||
QMUL(6, 0x80000000, -2, 0, 1)
|
||||
QMUL(7, 0x80000000, 2, 0, -1)
|
||||
QMUL(8, 0x80000001, 3, 0x80000003, -2)
|
||||
QMUL(9, 0x80000001, -3, 0x7ffffffd, 1)
|
||||
#else
|
||||
QMUL(4, 0x7ffffffff, 0x7ffffffff, 0xfffffff000000001, 0x3f)
|
||||
UQMUL(5, 0xffffffffff, 0xffffffffff, 0xfffffe0000000001, 0xffff)
|
||||
QMUL(6, 0x8000000000000000, -2, 0, 1)
|
||||
QMUL(7, 0x8000000000000000, 2, 0, -1)
|
||||
QMUL(8, 0x8000000000000001, 3, 0x8000000000000003, -2)
|
||||
QMUL(9, 0x8000000000000001, -3, 0x7ffffffffffffffd, 1)
|
||||
#endif
|
||||
prepare
|
||||
pushargi ok
|
||||
|
|
|
@ -100,6 +100,7 @@ case "$target_cpu" in
|
|||
ia64) cpu=ia64 ;;
|
||||
hppa*) cpu=hppa ;;
|
||||
aarch64) cpu=aarch64 ;;
|
||||
s390x) cpu=s390x ;;
|
||||
*) ;;
|
||||
esac
|
||||
AM_CONDITIONAL(cpu_arm, [test cpu-$cpu = cpu-arm])
|
||||
|
@ -110,6 +111,7 @@ AM_CONDITIONAL(cpu_x86, [test cpu-$cpu = cpu-x86])
|
|||
AM_CONDITIONAL(cpu_ia64, [test cpu-$cpu = cpu-ia64])
|
||||
AM_CONDITIONAL(cpu_hppa, [test cpu-$cpu = cpu-hppa])
|
||||
AM_CONDITIONAL(cpu_aarch64, [test cpu-$cpu = cpu-aarch64])
|
||||
AM_CONDITIONAL(cpu_s390x, [test cpu-$cpu = cpu-s390x])
|
||||
|
||||
# Test x87 if both, x87 and sse2 available
|
||||
ac_cv_test_x86_x87=
|
||||
|
|
|
@ -126,6 +126,8 @@ typedef jit_int32_t jit_fpr_t;
|
|||
# include <lightning/jit_hppa.h>
|
||||
#elif defined(__aarch64__)
|
||||
# include <lightning/jit_aarch64.h>
|
||||
#elif defined(__s390x__)
|
||||
# include <lightning/jit_s390x.h>
|
||||
#endif
|
||||
|
||||
#define jit_flag_node 0x00000001 /* patch node not absolute */
|
||||
|
|
|
@ -49,3 +49,7 @@ if cpu_aarch64
|
|||
lightning_include_HEADERS = \
|
||||
jit_aarch64.h
|
||||
endif
|
||||
if cpu_s390x
|
||||
lightning_include_HEADERS = \
|
||||
jit_s390x.h
|
||||
endif
|
||||
|
|
|
@ -85,6 +85,10 @@
|
|||
# define JIT_SP _SP
|
||||
# define JIT_RET _R0
|
||||
# define JIT_FRET _V0
|
||||
#elif defined(__s390x__)
|
||||
# define JIT_SP _R15
|
||||
# define JIT_RET _R2
|
||||
# define JIT_FRET _F0
|
||||
#endif
|
||||
|
||||
#define jit_size(vector) (sizeof(vector) / sizeof((vector)[0]))
|
||||
|
@ -94,6 +98,10 @@
|
|||
!jit_regset_tstbit(&_jitc->regarg, regno) && \
|
||||
!jit_regset_tstbit(&_jitc->regsav, regno))
|
||||
|
||||
#define jit_reg_free_if_spill_p(regno) \
|
||||
(!jit_regset_tstbit(&_jitc->regarg, regno) && \
|
||||
!jit_regset_tstbit(&_jitc->regsav, regno))
|
||||
|
||||
/*
|
||||
* Private jit_class bitmasks
|
||||
*/
|
||||
|
|
70
include/lightning/jit_s390x.h
Normal file
70
include/lightning/jit_s390x.h
Normal file
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* 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_s390x_h
|
||||
#define _jit_s390x_h
|
||||
|
||||
#define JIT_HASH_CONSTS 1
|
||||
#define JIT_NUM_OPERANDS 2
|
||||
|
||||
/*
|
||||
* Types
|
||||
*/
|
||||
#define JIT_FP _R13
|
||||
typedef enum {
|
||||
#define jit_arg_reg_p(i) ((i) >= 0 && (i) <= 5)
|
||||
#define jit_r(i) (_R12 + ((i) << 1))
|
||||
#define jit_r_num() 3
|
||||
#define jit_v(i) (_R11 + ((i) << 1))
|
||||
#define jit_v_num() 3
|
||||
#define jit_arg_f_reg_p(i) ((i) >= 0 && (i) <= 4)
|
||||
#define jit_f(i) (_F8 + (i))
|
||||
#define jit_f_num() 6
|
||||
#define JIT_R0 _R12
|
||||
#define JIT_R1 _R10
|
||||
#define JIT_R2 _R8
|
||||
#define JIT_V0 _R11
|
||||
#define JIT_V1 _R9
|
||||
#define JIT_V2 _R7
|
||||
_R0, _R1, /* Volatile */
|
||||
_R12, /* Saved, GOT */
|
||||
_R11, _R10, _R9, _R8, /* Saved */
|
||||
_R7, /* Saved */
|
||||
_R6, /* Saved, parameter */
|
||||
_R5, _R4, _R3, /* Parameter passing */
|
||||
_R2, /* Volatile, parameter and return value */
|
||||
_R13, /* Saved, literal pool pointer */
|
||||
_R14, /* Volatile, return address */
|
||||
_R15, /* Saved, stack pointer */
|
||||
#define JIT_F0 _F8
|
||||
#define JIT_F1 _F9
|
||||
#define JIT_F2 _F10
|
||||
#define JIT_F3 _F11
|
||||
#define JIT_F4 _F12
|
||||
#define JIT_F5 _F13
|
||||
_F1, _F3, _F5, _F7, /* Volatile */
|
||||
_F14, _F15, _F8, _F9, /* Saved */
|
||||
_F10, _F11, _F12, _F13, /* Saved */
|
||||
_F6, _F4, _F2, /* Volatile, parameter */
|
||||
_F0, /* Volatile, parameter and return value */
|
||||
_NOREG,
|
||||
#define JIT_NOREG _NOREG
|
||||
} jit_reg_t;
|
||||
|
||||
typedef jit_int32_t jit_regset_t;
|
||||
|
||||
#endif /* _jit_s390x_h */
|
|
@ -43,6 +43,9 @@ EXTRA_DIST = \
|
|||
jit_ppc.c \
|
||||
jit_ppc-cpu.c \
|
||||
jit_ppc-fpu.c \
|
||||
jit_s390x.c \
|
||||
jit_s390x-cpu.c \
|
||||
jit_s390x-fpu.c \
|
||||
jit_sparc.c \
|
||||
jit_sparc-cpu.c \
|
||||
jit_sparc-fpu.c \
|
||||
|
|
|
@ -90,9 +90,14 @@ jit_init_debug(void)
|
|||
# endif
|
||||
disassemble_init_powerpc(&disasm_info);
|
||||
# endif
|
||||
|
||||
# if defined(__sparc__)
|
||||
disasm_info.endian = disasm_info.display_endian = BFD_ENDIAN_BIG;
|
||||
# endif
|
||||
# if defined(__s390x__)
|
||||
disasm_info.arch = bfd_arch_s390;
|
||||
disasm_info.mach = bfd_mach_s390_64;
|
||||
disasm_info.endian = disasm_info.display_endian = BFD_ENDIAN_BIG;
|
||||
disasm_info.disassembler_options = "zarch";
|
||||
# endif
|
||||
disasm_info.print_address_func = disasm_print_address;
|
||||
|
||||
|
|
3392
lib/jit_s390x-cpu.c
Normal file
3392
lib/jit_s390x-cpu.c
Normal file
File diff suppressed because it is too large
Load diff
1198
lib/jit_s390x-fpu.c
Normal file
1198
lib/jit_s390x-fpu.c
Normal file
File diff suppressed because it is too large
Load diff
1281
lib/jit_s390x.c
Normal file
1281
lib/jit_s390x.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -2913,4 +2913,6 @@ _patch_register(jit_state_t *_jit, jit_node_t *node, jit_node_t *link,
|
|||
# include "jit_hppa.c"
|
||||
#elif defined(__aarch64__)
|
||||
# include "jit_aarch64.c"
|
||||
#elif defined(__s390x__)
|
||||
# include "jit_s390x.c"
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue