Support for ILP32 on HPUX-IA64.

This commit is contained in:
Andy Polyakov 2003-01-03 15:19:55 +00:00
parent 1954767b45
commit 4d1e5535b2
3 changed files with 102 additions and 23 deletions

View File

@ -262,11 +262,10 @@ my %table=(
"hpux64-parisc-gcc","gcc:-DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", "hpux64-parisc-gcc","gcc:-DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# IA-64 targets # IA-64 targets
# I have no idea if this one actually works, feedback needed. <appro> "hpux-ia64-cc","cc:-Ae +DD32 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"hpux-ia64-cc","cc:-Ae +DD32 +O3 +ESlit -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with # Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
# with debugging of the following config. # with debugging of the following config.
"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +ESlit -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", "hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# More attempts at unified 10.X and 11.X targets for HP C compiler. # More attempts at unified 10.X and 11.X targets for HP C compiler.
# #

6
config
View File

@ -696,9 +696,11 @@ EOF
CPU_VERSION=${CPU_VERSION:-0} CPU_VERSION=${CPU_VERSION:-0}
# See <sys/unistd.h> for further info on CPU_VERSION. # See <sys/unistd.h> for further info on CPU_VERSION.
if [ $CPU_VERSION -ge 768 ]; then # IA-64 CPU if [ $CPU_VERSION -ge 768 ]; then # IA-64 CPU
echo "NOTICE! 64-bit is the only ABI currently operational on HP-UXi." echo "WARNING! 64-bit ABI is the default configured ABI on HP-UXi."
echo " Post request to openssl-dev@openssl.org for 32-bit support." echo " If you wish to build 32-bit library, the you have to"
echo " invoke './Configure hpux-ia32-cc' *manually*."
if [ "$TEST" = "false" ]; then if [ "$TEST" = "false" ]; then
echo " You have about 5 seconds to press Ctrl-C to abort."
(stty -icanon min 0 time 50; read waste) < /dev/tty (stty -icanon min 0 time 50; read waste) < /dev/tty
fi fi
OUT="hpux64-ia64-cc" OUT="hpux64-ia64-cc"

View File

@ -1,6 +1,6 @@
.explicit .explicit
.text .text
.ident "ia64.S, Version 1.1" .ident "ia64.S, Version 1.2"
.ident "IA-64 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" .ident "IA-64 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>"
// //
@ -149,12 +149,27 @@ bn_add_words:
brp.loop.imp .L_bn_add_words_ctop,.L_bn_add_words_cend-16 brp.loop.imp .L_bn_add_words_ctop,.L_bn_add_words_cend-16
} }
.body .body
{ .mib; mov r14=r32 // rp { .mib;
#if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r14=0,r32 // rp
#else
mov r14=r32 // rp
#endif
mov r9=pr };; mov r9=pr };;
{ .mii; mov r15=r33 // ap { .mii;
#if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r15=0,r33 // ap
#else
mov r15=r33 // ap
#endif
mov ar.lc=r10 mov ar.lc=r10
mov ar.ec=6 } mov ar.ec=6 }
{ .mib; mov r16=r34 // bp { .mib;
#if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r16=0,r34 // bp
#else
mov r16=r34 // bp
#endif
mov pr.rot=1<<16 };; mov pr.rot=1<<16 };;
.L_bn_add_words_ctop: .L_bn_add_words_ctop:
@ -174,7 +189,7 @@ bn_add_words:
{ .mii; { .mii;
(p59) add r8=1,r8 // return value (p59) add r8=1,r8 // return value
mov pr=r9,-1 mov pr=r9,0x1ffff
mov ar.lc=r3 } mov ar.lc=r3 }
{ .mbb; nop.b 0x0 { .mbb; nop.b 0x0
br.ret.sptk.many b0 };; br.ret.sptk.many b0 };;
@ -202,12 +217,27 @@ bn_sub_words:
brp.loop.imp .L_bn_sub_words_ctop,.L_bn_sub_words_cend-16 brp.loop.imp .L_bn_sub_words_ctop,.L_bn_sub_words_cend-16
} }
.body .body
{ .mib; mov r14=r32 // rp { .mib;
#if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r14=0,r32 // rp
#else
mov r14=r32 // rp
#endif
mov r9=pr };; mov r9=pr };;
{ .mii; mov r15=r33 // ap { .mii;
#if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r15=0,r33 // ap
#else
mov r15=r33 // ap
#endif
mov ar.lc=r10 mov ar.lc=r10
mov ar.ec=6 } mov ar.ec=6 }
{ .mib; mov r16=r34 // bp { .mib;
#if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r16=0,r34 // bp
#else
mov r16=r34 // bp
#endif
mov pr.rot=1<<16 };; mov pr.rot=1<<16 };;
.L_bn_sub_words_ctop: .L_bn_sub_words_ctop:
@ -227,7 +257,7 @@ bn_sub_words:
{ .mii; { .mii;
(p59) add r8=1,r8 // return value (p59) add r8=1,r8 // return value
mov pr=r9,-1 mov pr=r9,0x1ffff
mov ar.lc=r3 } mov ar.lc=r3 }
{ .mbb; nop.b 0x0 { .mbb; nop.b 0x0
br.ret.sptk.many b0 };; br.ret.sptk.many b0 };;
@ -273,8 +303,14 @@ bn_mul_words:
#ifndef XMA_TEMPTATION #ifndef XMA_TEMPTATION
{ .mii; mov r14=r32 // rp { .mii;
mov r15=r33 // ap #if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r14=0,r32 // rp
addp4 r15=0,r33 // ap
#else
mov r14=r32 // rp
mov r15=r33 // ap
#endif
mov ar.lc=r10 } mov ar.lc=r10 }
{ .mii; mov r39=0 // serves as r33 at first (p26) { .mii; mov r39=0 // serves as r33 at first (p26)
mov ar.ec=12 };; mov ar.ec=12 };;
@ -344,7 +380,7 @@ bn_mul_words:
#endif // XMA_TEMPTATION #endif // XMA_TEMPTATION
{ .mii; nop.m 0x0 { .mii; nop.m 0x0
mov pr=r9,-1 mov pr=r9,0x1ffff
mov ar.lc=r3 } mov ar.lc=r3 }
{ .mfb; rum 1<<5 // clear um.mfh { .mfb; rum 1<<5 // clear um.mfh
nop.f 0x0 nop.f 0x0
@ -380,11 +416,21 @@ bn_mul_add_words:
// ------^----- serves as (p48) at first (p26) // ------^----- serves as (p48) at first (p26)
brp.loop.imp .L_bn_mul_add_words_ctop,.L_bn_mul_add_words_cend-16 brp.loop.imp .L_bn_mul_add_words_ctop,.L_bn_mul_add_words_cend-16
} }
{ .mii; mov r14=r32 // rp { .mii;
mov r15=r33 // ap #if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r14=0,r32 // rp
addp4 r15=0,r33 // ap
#else
mov r14=r32 // rp
mov r15=r33 // ap
#endif
mov ar.lc=r10 } mov ar.lc=r10 }
{ .mii; mov r39=0 // serves as r33 at first (p26) { .mii; mov r39=0 // serves as r33 at first (p26)
mov r18=r32 // rp copy #if defined(_HPUX_SOURCE) && defined(_ILP32)
addp4 r18=0,r32 // rp copy
#else
mov r18=r32 // rp copy
#endif
mov ar.ec=14 };; mov ar.ec=14 };;
// This loop spins in 3*(n+13) ticks on Itanium and should spin in // This loop spins in 3*(n+13) ticks on Itanium and should spin in
@ -428,7 +474,7 @@ bn_mul_add_words:
nop.b 0x0 };; nop.b 0x0 };;
{ .mii; { .mii;
(p59) add r8=1,r8 (p59) add r8=1,r8
mov pr=r9,-1 mov pr=r9,0x1ffff
mov ar.lc=r3 } mov ar.lc=r3 }
{ .mfb; rum 1<<5 // clear um.mfh { .mfb; rum 1<<5 // clear um.mfh
nop.f 0x0 nop.f 0x0
@ -461,6 +507,10 @@ bn_sqr_words:
mov r9=pr };; mov r9=pr };;
.body .body
#if defined(_HPUX_SOURCE) && defined(_ILP32)
{ .mii; addp4 r32=0,r32
addp4 r33=0,r33 };;
#endif
{ .mib; { .mib;
mov pr.rot=1<<16 mov pr.rot=1<<16
brp.loop.imp .L_bn_sqr_words_ctop,.L_bn_sqr_words_cend-16 brp.loop.imp .L_bn_sqr_words_ctop,.L_bn_sqr_words_cend-16
@ -492,7 +542,7 @@ bn_sqr_words:
.L_bn_sqr_words_cend: .L_bn_sqr_words_cend:
{ .mii; nop.m 0x0 { .mii; nop.m 0x0
mov pr=r9,-1 mov pr=r9,0x1ffff
mov ar.lc=r3 } mov ar.lc=r3 }
{ .mfb; rum 1<<5 // clear um.mfh { .mfb; rum 1<<5 // clear um.mfh
nop.f 0x0 nop.f 0x0
@ -526,7 +576,14 @@ bn_sqr_comba8:
.prologue .prologue
.fframe 0 .fframe 0
.save ar.pfs,r2 .save ar.pfs,r2
#if defined(_HPUX_SOURCE) && defined(_ILP32)
{ .mii; alloc r2=ar.pfs,2,1,0,0 { .mii; alloc r2=ar.pfs,2,1,0,0
addp4 r33=0,r33
addp4 r32=0,r32 };;
{ .mii;
#else
{ .mii; alloc r2=ar.pfs,2,1,0,0
#endif
mov r34=r33 mov r34=r33
add r14=8,r33 };; add r14=8,r33 };;
.body .body
@ -587,7 +644,14 @@ bn_mul_comba8:
.prologue .prologue
.fframe 0 .fframe 0
.save ar.pfs,r2 .save ar.pfs,r2
#if defined(_HPUX_SOURCE) && defined(_ILP32)
{ .mii; alloc r2=ar.pfs,3,0,0,0 { .mii; alloc r2=ar.pfs,3,0,0,0
addp4 r33=0,r33
addp4 r34=0,r34 };;
{ .mii; addp4 r32=0,r32
#else
{ .mii; alloc r2=ar.pfs,3,0,0,0
#endif
add r14=8,r33 add r14=8,r33
add r17=8,r34 } add r17=8,r34 }
.body .body
@ -1138,7 +1202,14 @@ bn_sqr_comba4:
.prologue .prologue
.fframe 0 .fframe 0
.save ar.pfs,r2 .save ar.pfs,r2
#if defined(_HPUX_SOURCE) && defined(_ILP32)
{ .mii; alloc r2=ar.pfs,2,1,0,0
addp4 r32=0,r32
addp4 r33=0,r33 };;
{ .mii;
#else
{ .mii; alloc r2=ar.pfs,2,1,0,0 { .mii; alloc r2=ar.pfs,2,1,0,0
#endif
mov r34=r33 mov r34=r33
add r14=8,r33 };; add r14=8,r33 };;
.body .body
@ -1164,7 +1235,14 @@ bn_mul_comba4:
.prologue .prologue
.fframe 0 .fframe 0
.save ar.pfs,r2 .save ar.pfs,r2
#if defined(_HPUX_SOURCE) && defined(_ILP32)
{ .mii; alloc r2=ar.pfs,3,0,0,0
addp4 r33=0,r33
addp4 r34=0,r34 };;
{ .mii; addp4 r32=0,r32
#else
{ .mii; alloc r2=ar.pfs,3,0,0,0 { .mii; alloc r2=ar.pfs,3,0,0,0
#endif
add r14=8,r33 add r14=8,r33
add r17=8,r34 } add r17=8,r34 }
.body .body
@ -1464,7 +1542,7 @@ bn_div_words:
or r8=r8,r33 or r8=r8,r33
mov ar.pfs=r2 };; mov ar.pfs=r2 };;
{ .mii; shr.u r9=H,I // remainder if anybody wants it { .mii; shr.u r9=H,I // remainder if anybody wants it
mov pr=r10,-1 } mov pr=r10,0x1ffff }
{ .mfb; br.ret.sptk.many b0 };; { .mfb; br.ret.sptk.many b0 };;
// Unsigned 64 by 32 (well, by 64 for the moment) bit integer division // Unsigned 64 by 32 (well, by 64 for the moment) bit integer division