sub MSGSCHEDULE0 {
my ($index) = @_;
my $code=<<___;
- ld.w $T1, $INP, 4*$index
+ ld.w $T1, $INP, @{[4*$index]}
revb.2w $T1, $T1
- st.w $T1, $ADDR, 4*$index
+ st.w $T1, $ADDR, @{[4*$index]}
___
return strip($code);
}
sub MSGSCHEDULE1 {
my ($index) = @_;
my $code=<<___;
- ld.w $T1, $ADDR, (($index-2)&0x0f)*4
- ld.w $T2, $ADDR, (($index-15)&0x0f)*4
- ld.w $T3, $ADDR, (($index-7)&0x0f)*4
- ld.w $T4, $ADDR, ($index&0x0f)*4
+ ld.w $T1, $ADDR, @{[(($index-2)&0x0f)*4]}
+ ld.w $T2, $ADDR, @{[(($index-15)&0x0f)*4]}
+ ld.w $T3, $ADDR, @{[(($index-7)&0x0f)*4]}
+ ld.w $T4, $ADDR, @{[($index&0x0f)*4]}
rotri.w $T5, $T1, 17
rotri.w $T6, $T1, 19
srli.w $T1, $T1, 10
xor $T2, $T2, $T6
add.w $T1, $T1, $T2
add.w $T1, $T1, $T4
- st.w $T1, $ADDR, ($index&0x0f)*4
+ st.w $T1, $ADDR, @{[($index&0x0f)*4]}
___
return strip($code);
}
sub sha256_T1 {
my ($index, $e, $f, $g, $h) = @_;
my $code=<<___;
- ld.w $T4, $KT, 4*$index
+ ld.w $T4, $KT, @{[4*$index]}
add.w $h, $h, $T1
add.w $h, $h, $T4
rotri.w $T2, $e, 6
sub MSGSCHEDULE0 {
my ($index) = @_;
my $code=<<___;
- ld.d $T1, $INP, 8*$index
+ ld.d $T1, $INP, @{[8*$index]}
revb.d $T1, $T1
- st.d $T1, $ADDR, 8*$index
+ st.d $T1, $ADDR, @{[8*$index]}
___
return strip($code);
}
sub MSGSCHEDULE1 {
my ($index) = @_;
my $code=<<___;
- ld.d $T1, $ADDR, (($index-2)&0x0f)*8
- ld.d $T2, $ADDR, (($index-15)&0x0f)*8
- ld.d $T3, $ADDR, (($index-7)&0x0f)*8
- ld.d $T4, $ADDR, ($index&0x0f)*8
+ ld.d $T1, $ADDR, @{[(($index-2)&0x0f)*8]}
+ ld.d $T2, $ADDR, @{[(($index-15)&0x0f)*8]}
+ ld.d $T3, $ADDR, @{[(($index-7)&0x0f)*8]}
+ ld.d $T4, $ADDR, @{[($index&0x0f)*8]}
rotri.d $T5, $T1, 19
rotri.d $T6, $T1, 61
srli.d $T1, $T1, 6
xor $T2, $T2, $T6
add.d $T1, $T1, $T2
add.d $T1, $T1, $T4
- st.d $T1, $ADDR, 8*($index&0x0f)
+ st.d $T1, $ADDR, @{[8*($index&0x0f)]}
___
return strip($code);
}
sub sha512_T1 {
my ($index, $e, $f, $g, $h) = @_;
my $code=<<___;
- ld.d $T4, $KT, 8*$index
+ ld.d $T4, $KT, @{[8*$index]}
add.d $h, $h, $T1
add.d $h, $h, $T4
rotri.d $T2, $e, 14
___
for (my $i = 0; $i < 80; $i += 8) {
-
$code .= <<___;
@{[SHA512ROUND $i, $A, $B, $C, $D, $E, $F, $G, $H]}
@{[SHA512ROUND $i+1, $H, $A, $B, $C, $D, $E, $F, $G]}