( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
die "can't locate x86_64-xlate.pl";
+push(@INC,"${dir}","${dir}../../perlasm");
+require "x86_64-support.pl";
+
+$ptr_size=&pointer_size($flavour);
+
$avx=0;
if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
$num="%edx";
@ptr=map("%r$_",(8..11));
$Tbl="%rbp";
+$inp_elm_size=2*$ptr_size;
@V=($A,$B,$C,$D,$E)=map("%xmm$_",(0..4));
($t0,$t1,$t2,$t3,$tx)=map("%xmm$_",(5..9));
xor $num,$num
___
for($i=0;$i<4;$i++) {
+ $ptr_reg=&pointer_register($flavour,@ptr[$i]);
$code.=<<___;
- mov `16*$i+0`($inp),@ptr[$i] # input pointer
- mov `16*$i+8`($inp),%ecx # number of blocks
+ # input pointer
+ mov `$inp_elm_size*$i+0`($inp),$ptr_reg
+ # number of blocks
+ mov `$inp_elm_size*$i+$ptr_size`($inp),%ecx
cmp $num,%ecx
cmovg %ecx,$num # find maximum
test %ecx,%ecx
mov `$REG_SZ*17+8`(%rsp),$num
lea $REG_SZ($ctx),$ctx
- lea `16*$REG_SZ/4`($inp),$inp
+ lea `$inp_elm_size*$REG_SZ/4`($inp),$inp
dec $num
jnz .Loop_grande
xor $num,$num
___
for($i=0;$i<2;$i++) {
+ $ptr_reg=&pointer_register($flavour,@ptr[$i]);
$code.=<<___;
- mov `16*$i+0`($inp),@ptr[$i] # input pointer
- mov `16*$i+8`($inp),%ecx # number of blocks
+ # input pointer
+ mov `$inp_elm_size*$i+0`($inp),$ptr_reg
+ # number of blocks
+ mov `$inp_elm_size*$i+$ptr_size`($inp),%ecx
cmp $num,%ecx
cmovg %ecx,$num # find maximum
test %ecx,%ecx
movq $E0,0x80-0x40($ctx) # e1.e0
lea `$REG_SZ/2`($ctx),$ctx
- lea `16*2`($inp),$inp
+ lea `$inp_elm_size*2`($inp),$inp
dec $num
jnz .Loop_grande_shaext
xor $num,$num
___
for($i=0;$i<4;$i++) {
+ $ptr_reg=&pointer_register($flavour,@ptr[$i]);
$code.=<<___;
- mov `16*$i+0`($inp),@ptr[$i] # input pointer
- mov `16*$i+8`($inp),%ecx # number of blocks
+ # input pointer
+ mov `$inp_elm_size*$i+0`($inp),$ptr_reg
+ # number of blocks
+ mov `$inp_elm_size*$i+$ptr_size`($inp),%ecx
cmp $num,%ecx
cmovg %ecx,$num # find maximum
test %ecx,%ecx
mov `$REG_SZ*17+8`(%rsp),$num
lea $REG_SZ($ctx),$ctx
- lea `16*$REG_SZ/4`($inp),$inp
+ lea `$inp_elm_size*$REG_SZ/4`($inp),$inp
dec $num
jnz .Loop_grande_avx
lea `$REG_SZ*16`(%rsp),%rbx
___
for($i=0;$i<8;$i++) {
+ $ptr_reg=&pointer_register($flavour,@ptr[$i]);
$code.=<<___;
- mov `16*$i+0`($inp),@ptr[$i] # input pointer
- mov `16*$i+8`($inp),%ecx # number of blocks
+ # input pointer
+ mov `$inp_elm_size*$i+0`($inp),$ptr_reg
+ # number of blocks
+ mov `$inp_elm_size*$i+$ptr_size`($inp),%ecx
cmp $num,%ecx
cmovg %ecx,$num # find maximum
test %ecx,%ecx
#mov `$REG_SZ*17+8`(%rsp),$num
#lea $REG_SZ($ctx),$ctx
- #lea `16*$REG_SZ/4`($inp),$inp
+ #lea `$inp_elm_size*$REG_SZ/4`($inp),$inp
#dec $num
#jnz .Loop_grande_avx2