Browse Source

x86[_64]cpuid.pl: add low-level RDSEED.

master
Andy Polyakov 9 years ago
parent
commit
f4d456408d
4 changed files with 48 additions and 0 deletions
  1. +13
    -0
      crypto/perlasm/x86_64-xlate.pl
  2. +8
    -0
      crypto/perlasm/x86asm.pl
  3. +15
    -0
      crypto/x86_64cpuid.pl
  4. +12
    -0
      crypto/x86cpuid.pl

+ 13
- 0
crypto/perlasm/x86_64-xlate.pl View File

@ -778,6 +778,19 @@ my $rdrand = sub {
}
};
my $rdseed = sub {
if (shift =~ /%[er](\w+)/) {
my @opcode=();
my $dst=$1;
if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; }
rex(\@opcode,0,$1,8);
push @opcode,0x0f,0xc7,0xf8|($dst&7);
@opcode;
} else {
();
}
};
sub rxb {
local *opcode=shift;
my ($dst,$src1,$src2,$rxb)=@_;


+ 8
- 0
crypto/perlasm/x86asm.pl View File

@ -131,6 +131,14 @@ sub ::rdrand
{ &::generic("rdrand",@_); }
}
sub ::rdseed
{ my ($dst)=@_;
if ($dst =~ /(e[a-dsd][ixp])/)
{ &::data_byte(0x0f,0xc7,0xf8|$regrm{$dst}); }
else
{ &::generic("rdrand",@_); }
}
sub rxb {
local *opcode=shift;
my ($dst,$src1,$src2,$rxb)=@_;


+ 15
- 0
crypto/x86_64cpuid.pl View File

@ -379,6 +379,21 @@ OPENSSL_ia32_rdrand:
cmove %rcx,%rax
ret
.size OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand
.globl OPENSSL_ia32_rdseed
.type OPENSSL_ia32_rdseed,\@abi-omnipotent
.align 16
OPENSSL_ia32_rdseed:
mov \$8,%ecx
.Loop_rdseed:
rdseed %rax
jc .Lbreak_rdseed
loop .Loop_rdseed
.Lbreak_rdseed:
cmp \$0,%rax
cmove %rcx,%rax
ret
.size OPENSSL_ia32_rdseed,.-OPENSSL_ia32_rdseed
___
close STDOUT; # flush

+ 12
- 0
crypto/x86cpuid.pl View File

@ -469,6 +469,18 @@ my $max = "ebp";
&ret ();
&function_end_B("OPENSSL_ia32_rdrand");
&function_begin_B("OPENSSL_ia32_rdseed");
&mov ("ecx",8);
&set_label("loop");
&rdseed ("eax");
&jc (&label("break"));
&loop (&label("loop"));
&set_label("break");
&cmp ("eax",0);
&cmove ("eax","ecx");
&ret ();
&function_end_B("OPENSSL_ia32_rdseed");
&initseg("OPENSSL_cpuid_setup");
&hidden("OPENSSL_cpuid_setup");


Loading…
Cancel
Save