diff options
author | Niels Möller <nisse@lysator.liu.se> | 2021-03-28 20:43:56 +0200 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2021-03-28 20:43:56 +0200 |
commit | 0bff7a2bc96627371d37bfc23f51cf01f0eab30e (patch) | |
tree | d12efdb083501456e6e591ee1227b442d9016ccd | |
parent | 53b71192704878f3f19b6c8baabf41ae35ab5b2e (diff) | |
download | nettle-0bff7a2bc96627371d37bfc23f51cf01f0eab30e.tar.gz |
Initial config for s390x, contributed by Mamone Tarsha.
* configure.ac: Add flag --enable-s390x-msa-x1. Add ABI check for
s390x, and setup asm_path.
* Makefile.in (distdir): Add s390x directory.
* s390x/README: New file
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Makefile.in | 3 | ||||
-rw-r--r-- | configure.ac | 24 | ||||
-rw-r--r-- | s390x/README | 60 |
4 files changed, 93 insertions, 2 deletions
@@ -1,3 +1,11 @@ +2021-03-28 Niels Möller <nisse@lysator.liu.se> + + Initial config for s390x, contributed by Mamone Tarsha. + * configure.ac: Add flag --enable-s390x-msa-x1. Add ABI check for + s390x, and setup asm_path. + * Makefile.in (distdir): Add s390x directory. + * s390x/README: New file + 2021-03-24 Niels Möller <nisse@lysator.liu.se> * .gitlab-ci.yml: Add remote tests for s390x. diff --git a/Makefile.in b/Makefile.in index 0ace35f7..868afdd7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -617,7 +617,8 @@ distdir: $(DISTFILES) x86_64 x86_64/aesni x86_64/sha_ni x86_64/fat \ arm arm/neon arm/v6 arm/fat \ arm64 arm64/crypto arm64/fat \ - powerpc64 powerpc64/p7 powerpc64/p8 powerpc64/fat ; do \ + powerpc64 powerpc64/p7 powerpc64/p8 powerpc64/fat \ + s390x ; do \ mkdir "$(distdir)/$$d" ; \ find "$(srcdir)/$$d" -maxdepth 1 '(' -name '*.asm' -o -name '*.m4' -o -name README ')' \ -exec cp '{}' "$(distdir)/$$d" ';' ; \ diff --git a/configure.ac b/configure.ac index 026ae99d..be2916c1 100644 --- a/configure.ac +++ b/configure.ac @@ -101,6 +101,10 @@ AC_ARG_ENABLE(power-altivec, AC_HELP_STRING([--enable-power-altivec], [Enable POWER altivec and vsx extensions. (default=no)]),, [enable_altivec=no]) +AC_ARG_ENABLE(s390x-msa-x1, + AC_HELP_STRING([--enable-s390x-msa-x1], [Enable message-security assist extension 1 on z/Architecture. (default=no)]),, + [enable_s390x_msa_x1=no]) + AC_ARG_ENABLE(mini-gmp, AC_HELP_STRING([--enable-mini-gmp], [Enable mini-gmp, used instead of libgmp.]),, [enable_mini_gmp=no]) @@ -359,6 +363,17 @@ case "$host_cpu" in ABI=64 ]) ;; + *s390x*) + AC_TRY_COMPILE([ +#if defined(__s390x__) +#error 64-bit s390x +#endif + ], [], [ + ABI=32 + ], [ + ABI=64 + ]) + ;; esac if test "x$ABI" != xstandard ; then @@ -512,7 +527,14 @@ if test "x$enable_assembler" = xyes ; then fi fi ;; - + *s390x*) + if test "$ABI" = 64 ; then + asm_path="s390x" + if test "$enable_s390x_msa_x1" = yes ; then + asm_path="s390x/msa_x1 $asm_path" + fi + fi + ;; *) enable_assembler=no ;; diff --git a/s390x/README b/s390x/README new file mode 100644 index 00000000..249a1c08 --- /dev/null +++ b/s390x/README @@ -0,0 +1,60 @@ +Registers Conventions[1] + +Register Status Use + +r0, r1 General purpose Volatile +r2 Parameter passing and return values Volatile +r3, r4, r5 Parameter passing Volatile +r6 Parameter passing Saved +r7 - r11 Local variables Saved +r12 Local variable, commonly used as GOT pointer Saved +r13 Local variable, commonly used as Literal Pool pointer Saved +r14 Return address Volatile +r15 Stack pointer Saved + +f0, f2, f4, f6 Parameter passing and return values Volatile +f1, f3, f5, f7 General purpose Volatile +f8 – f15 General purpose Saved + +Vector Register Conventions + +Register Use + +VR0 - VR7 Volatile +VR8 - VR15 Bytes 0-7 are non-volatile, Bytes 8-15 are volatile +VR16 - VR23 Non-volatile +VR24 - VR31 Volatile + +General Registers[2] + +In addition to their use as accumulators in general +arithmetic and logical operations, 15 of the 16 general +registers are also used as base-address and +index registers in address generation. In these +cases, the registers are designated by a four-bit B +field or X field in an instruction. A value of zero in the +B or X field specifies that no base or index is to be +applied, and, thus, general register 0 cannot be designated +as containing a base address or index. + +Parameter passing[1] + +Values shorter than 64 bits are sign- or zero-extended (as appropriate) +to 64 bits. Arguments not handled in the registers are passed in the parameter +words of the caller’s stack frame. + +Dynamic stack space allocation[1] + +1. After a new stack frame is acquired, and before the first dynamic space +allocation, a new register, the frame pointer or FP, is set to the value of the +stack pointer. +2. The amount of dynamic space to be allocated is rounded up to a multiple of 8 +bytes, so that 8-byte stack alignment is maintained. +3. The stack pointer is decreased by the rounded byte count, and the address of +the previous stack frame (the back chain) may be stored at the word addressed +by the new stack pointer. The back chain is not necessary to restore from this +allocation at the end of the function since the frame pointer can be used to +restore the stack pointer. + +[1] http://legacy.redhat.com/pub/redhat/linux/7.1/es/os/s390x/doc/lzsabi0.pdf +[2] https://www.ibm.com/support/pages/zarchitecture-principles-operation |