Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1753257166, "reponame":"openssl", "desc":"OpenSSL", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://warmcat.com/repo/openssl", "f":3, "items": [ {"schema":"libjg2-1", "cid":"a3b7d6ea83a1558df540a44215a95419", "commit": {"type":"commit", "time": 1486666823, "time_ofs": 60, "oid_tree": { "oid": "ed0a536f1050acdf9afde1da5f2f884d62489019", "alias": []}, "oid":{ "oid": "e09b6216a5423555271509acf5112da5484ec15d", "alias": []}, "msg": "perlasm/x86_64-xlate.pl: minor readability updates.", "sig_commit": { "git_time": { "time": 1486666823, "offset": 60 }, "name": "Andy Polyakov", "email": "appro@openssl.org", "md5": "50bd64fa2a792cbbf679fa16213a3b2a" }, "sig_author": { "git_time": { "time": 1486211082, "offset": 60 }, "name": "Andy Polyakov", "email": "appro@openssl.org", "md5": "50bd64fa2a792cbbf679fa16213a3b2a" }}, "body": "perlasm/x86_64-xlate.pl: minor readability updates.\n\nReviewed-by: Rich Salz \u003crsalz@openssl.org\u003e\n" , "diff": "diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl\nindex dd8afe7..66cfaca 100755\n--- a/crypto/perlasm/x86_64-xlate.pl\n+++ b/crypto/perlasm/x86_64-xlate.pl\n@@ -100,7 +100,7 @@ elsif (!$gas)\n {\t$nasm \u003d $1 + $2*0.01; $PTR\u003d\u0022\u0022; }\n elsif (`ml64 2\u003e\u00261` \u003d~ m/Version ([0-9]+)\u005c.([0-9]+)(\u005c.([0-9]+))?/)\n {\t$masm \u003d $1 + $2*2**-16 + $4*2**-32; }\n- die \u0022no assembler found on %PATH\u0022 if (!($nasm || $masm));\n+ die \u0022no assembler found on %PATH%\u0022 if (!($nasm || $masm));\n $win64\u003d1;\n $elf\u003d0;\n $decor\u003d\u0022\u005c$L\u005c$\u0022;\n@@ -223,6 +223,13 @@ my %globals;\n }\n }\n { package ea;\t\t# pick up effective addresses: expr(%reg,%reg,scale)\n+\n+ my %szmap \u003d (\tb\u003d\u003e\u0022BYTE$PTR\u0022, w\u003d\u003e\u0022WORD$PTR\u0022,\n+\t\t\tl\u003d\u003e\u0022DWORD$PTR\u0022, d\u003d\u003e\u0022DWORD$PTR\u0022,\n+\t\t\tq\u003d\u003e\u0022QWORD$PTR\u0022, o\u003d\u003e\u0022OWORD$PTR\u0022,\n+\t\t\tx\u003d\u003e\u0022XMMWORD$PTR\u0022, y\u003d\u003e\u0022YMMWORD$PTR\u0022,\n+\t\t\tz\u003d\u003e\u0022ZMMWORD$PTR\u0022 ) if (!$gas);\n+\n sub re {\n \tmy\t($class, $line, $opcode) \u003d @_;\n \tmy\t$self \u003d {};\n@@ -235,7 +242,7 @@ my %globals;\n \t $self-\u003e{label} \u003d $2;\n \t ($self-\u003e{base},$self-\u003e{index},$self-\u003e{scale})\u003dsplit(/,/,$3);\n \t $self-\u003e{scale} \u003d 1 if (!defined($self-\u003e{scale}));\n-\t $self-\u003e{pred} \u003d $4;\n+\t $self-\u003e{opmask} \u003d $4;\n \t $ret \u003d $self;\n \t $$line \u003d substr($$line,@+[0]); $$line \u003d~ s/^\u005cs+//;\n \n@@ -276,6 +283,8 @@ my %globals;\n \t $self-\u003e{label} \u003d~ s/\u005cb([0-9]+)\u005cb/$1\u003e\u003e0/eg;\n \t}\n \n+\t# if base register is %rbp or %r13, see if it's possible to\n+\t# flip base and ingex registers [for better performance]\n \tif (!$self-\u003e{label} \u0026\u0026 $self-\u003e{index} \u0026\u0026 $self-\u003e{scale}\u003d\u003d1 \u0026\u0026\n \t $self-\u003e{base} \u003d~ /(rbp|r13)/) {\n \t\t$self-\u003e{base} \u003d $self-\u003e{index}; $self-\u003e{index} \u003d $1;\n@@ -289,17 +298,12 @@ my %globals;\n \t\t\t\t\t$self-\u003e{asterisk},$self-\u003e{label},\n \t\t\t\t\t$self-\u003e{base}?\u0022%$self-\u003e{base}\u0022:\u0022\u0022,\n \t\t\t\t\t$self-\u003e{index},$self-\u003e{scale},\n-\t\t\t\t\t$self-\u003e{pred};\n+\t\t\t\t\t$self-\u003e{opmask};\n \t } else {\n \t\tsprintf \u0022%s%s(%%%s)%s\u0022,\t$self-\u003e{asterisk},$self-\u003e{label},\n-\t\t\t\t\t$self-\u003e{base},$self-\u003e{pred};\n+\t\t\t\t\t$self-\u003e{base},$self-\u003e{opmask};\n \t }\n \t} else {\n-\t my %szmap \u003d (\tb\u003d\u003e\u0022BYTE$PTR\u0022, w\u003d\u003e\u0022WORD$PTR\u0022,\n-\t\t\tl\u003d\u003e\u0022DWORD$PTR\u0022, d\u003d\u003e\u0022DWORD$PTR\u0022,\n-\t \t\tq\u003d\u003e\u0022QWORD$PTR\u0022, o\u003d\u003e\u0022OWORD$PTR\u0022,\n-\t\t\tx\u003d\u003e\u0022XMMWORD$PTR\u0022, y\u003d\u003e\u0022YMMWORD$PTR\u0022, z\u003d\u003e\u0022ZMMWORD$PTR\u0022 );\n-\n \t $self-\u003e{label} \u003d~ s/\u005c./\u005c$/g;\n \t $self-\u003e{label} \u003d~ s/(?\u003c![\u005cw\u005c$\u005c.])0x([0-9a-f]+)/0$1h/ig;\n \t $self-\u003e{label} \u003d \u0022($self-\u003e{label})\u0022 if ($self-\u003e{label} \u003d~ /[\u005c*\u005c+\u005c-\u005c/]/);\n@@ -311,20 +315,20 @@ my %globals;\n \t ($mnemonic \u003d~ /^vpbroadcast([qdwb])$/)\t\u0026\u0026 ($sz\u003d$1) ||\n \t ($mnemonic \u003d~ /^v(?!perm)[a-z]+[fi]128$/)\t\u0026\u0026 ($sz\u003d\u0022x\u0022);\n \n-\t $self-\u003e{pred} \u003d~ s/%(k[0-7])/$1/;\n+\t $self-\u003e{opmask} \u003d~ s/%(k[0-7])/$1/;\n \n \t if (defined($self-\u003e{index})) {\n \t\tsprintf \u0022%s[%s%s*%d%s]%s\u0022,$szmap{$sz},\n \t\t\t\t\t$self-\u003e{label}?\u0022$self-\u003e{label}+\u0022:\u0022\u0022,\n \t\t\t\t\t$self-\u003e{index},$self-\u003e{scale},\n \t\t\t\t\t$self-\u003e{base}?\u0022+$self-\u003e{base}\u0022:\u0022\u0022,\n-\t\t\t\t\t$self-\u003e{pred};\n+\t\t\t\t\t$self-\u003e{opmask};\n \t } elsif ($self-\u003e{base} eq \u0022rip\u0022) {\n \t\tsprintf \u0022%s[%s]\u0022,$szmap{$sz},$self-\u003e{label};\n \t } else {\n \t\tsprintf \u0022%s[%s%s]%s\u0022,\t$szmap{$sz},\n \t\t\t\t\t$self-\u003e{label}?\u0022$self-\u003e{label}+\u0022:\u0022\u0022,\n-\t\t\t\t\t$self-\u003e{base},$self-\u003e{pred};\n+\t\t\t\t\t$self-\u003e{base},$self-\u003e{opmask};\n \t }\n \t}\n }\n@@ -340,7 +344,7 @@ my %globals;\n \t bless $self,$class;\n \t $self-\u003e{asterisk} \u003d $1;\n \t $self-\u003e{value} \u003d $2;\n-\t $self-\u003e{pred} \u003d $3;\n+\t $self-\u003e{opmask} \u003d $3;\n \t $opcode-\u003esize($self-\u003esize());\n \t $ret \u003d $self;\n \t $$line \u003d substr($$line,@+[0]); $$line \u003d~ s/^\u005cs+//;\n@@ -366,9 +370,9 @@ my %globals;\n \tmy $self \u003d shift;\n \tif ($gas)\t{ sprintf \u0022%s%%%s%s\u0022,\t$self-\u003e{asterisk},\n \t\t\t\t\t\t$self-\u003e{value},\n-\t\t\t\t\t\t$self-\u003e{pred}; }\n-\telse\t\t{ $self-\u003e{pred} \u003d~ s/%(k[0-7])/$1/;\n-\t\t\t $self-\u003e{value}.$self-\u003e{pred}; }\n+\t\t\t\t\t\t$self-\u003e{opmask}; }\n+\telse\t\t{ $self-\u003e{opmask} \u003d~ s/%(k[0-7])/$1/;\n+\t\t\t $self-\u003e{value}.$self-\u003e{opmask}; }\n }\n }\n { package label;\t# pick up labels, which end with :\n@@ -392,9 +396,8 @@ my %globals;\n \n \tif ($gas) {\n \t my $func \u003d ($globals{$self-\u003e{value}} or $self-\u003e{value}) . \u0022:\u0022;\n-\t if ($win64\t\u0026\u0026\n-\t\t\t$current_function-\u003e{name} eq $self-\u003e{value} \u0026\u0026\n-\t\t\t$current_function-\u003e{abi} eq \u0022svr4\u0022) {\n+\t if ($win64\t\u0026\u0026 $current_function-\u003e{name} eq $self-\u003e{value}\n+\t\t\t\u0026\u0026 $current_function-\u003e{abi} eq \u0022svr4\u0022) {\n \t\t$func .\u003d \u0022\u005cn\u0022;\n \t\t$func .\u003d \u0022\tmovq\t%rdi,8(%rsp)\u005cn\u0022;\n \t\t$func .\u003d \u0022\tmovq\t%rsi,16(%rsp)\u005cn\u0022;\n@@ -473,15 +476,6 @@ my %globals;\n \tmy\t$self \u003d {};\n \tmy\t$ret;\n \tmy\t$dir;\n-\tmy\t%opcode \u003d\t# lea 2f-1f(%rip),%dst; 1: nop; 2:\n-\t\t(\t\u0022%rax\u0022\u003d\u003e0x01058d48,\t\u0022%rcx\u0022\u003d\u003e0x010d8d48,\n-\t\t\t\u0022%rdx\u0022\u003d\u003e0x01158d48,\t\u0022%rbx\u0022\u003d\u003e0x011d8d48,\n-\t\t\t\u0022%rsp\u0022\u003d\u003e0x01258d48,\t\u0022%rbp\u0022\u003d\u003e0x012d8d48,\n-\t\t\t\u0022%rsi\u0022\u003d\u003e0x01358d48,\t\u0022%rdi\u0022\u003d\u003e0x013d8d48,\n-\t\t\t\u0022%r8\u0022 \u003d\u003e0x01058d4c,\t\u0022%r9\u0022 \u003d\u003e0x010d8d4c,\n-\t\t\t\u0022%r10\u0022\u003d\u003e0x01158d4c,\t\u0022%r11\u0022\u003d\u003e0x011d8d4c,\n-\t\t\t\u0022%r12\u0022\u003d\u003e0x01258d4c,\t\u0022%r13\u0022\u003d\u003e0x012d8d4c,\n-\t\t\t\u0022%r14\u0022\u003d\u003e0x01358d4c,\t\u0022%r15\u0022\u003d\u003e0x013d8d4c\t);\n \n \tif ($$line \u003d~ /^\u005cs*(\u005c.\u005cw+)/) {\n \t bless $self,$class;\n@@ -491,7 +485,19 @@ my %globals;\n \t $$line \u003d substr($$line,@+[0]); $$line \u003d~ s/^\u005cs+//;\n \n \t SWITCH: for ($dir) {\n+\t\t# obsolete, to be removed\n \t\t/\u005c.picmeup/ \u0026\u0026 do { if ($$line \u003d~ /(%r[\u005cw]+)/i) {\n+\t\t\t\t\tmy %opcode \u003d # lea 2f-1f(%rip),%dst; 1: nop; 2:\n+\t\t\t\t\t\t ( \u0022%rax\u0022\u003d\u003e0x01058d48, \u0022%rcx\u0022\u003d\u003e0x010d8d48,\n+\t\t\t\t\t\t \u0022%rdx\u0022\u003d\u003e0x01158d48, \u0022%rbx\u0022\u003d\u003e0x011d8d48,\n+\t\t\t\t\t\t \u0022%rsp\u0022\u003d\u003e0x01258d48, \u0022%rbp\u0022\u003d\u003e0x012d8d48,\n+\t\t\t\t\t\t \u0022%rsi\u0022\u003d\u003e0x01358d48, \u0022%rdi\u0022\u003d\u003e0x013d8d48,\n+\t\t\t\t\t\t \u0022%r8\u0022 \u003d\u003e0x01058d4c, \u0022%r9\u0022 \u003d\u003e0x010d8d4c,\n+\t\t\t\t\t\t \u0022%r10\u0022\u003d\u003e0x01158d4c, \u0022%r11\u0022\u003d\u003e0x011d8d4c,\n+\t\t\t\t\t\t \u0022%r12\u0022\u003d\u003e0x01258d4c, \u0022%r13\u0022\u003d\u003e0x012d8d4c,\n+\t\t\t\t\t\t \u0022%r14\u0022\u003d\u003e0x01358d4c, \u0022%r15\u0022\u003d\u003e0x013d8d4c);\n+\n+\n \t\t\t \t\t$dir\u003d\u0022\u005ct.long\u0022;\n \t\t\t\t\t$$line\u003dsprintf \u00220x%x,0x90000000\u0022,$opcode{$1};\n \t\t\t\t }\n@@ -701,15 +707,6 @@ my %globals;\n }\n }\n \n-sub rex {\n- my $opcode\u003dshift;\n- my ($dst,$src,$rex)\u003d@_;\n-\n- $rex|\u003d0x04 if($dst\u003e\u003d8);\n- $rex|\u003d0x01 if($src\u003e\u003d8);\n- push @$opcode,($rex|0x40) if ($rex);\n-}\n-\n # Upon initial x86_64 introduction SSE\u003e2 extensions were not introduced\n # yet. In order not to be bothered by tracing exact assembler versions,\n # but at the same time to provide a bare security minimum of AES-NI, we\n@@ -720,6 +717,15 @@ sub rex {\n my %regrm \u003d (\t\u0022%eax\u0022\u003d\u003e0, \u0022%ecx\u0022\u003d\u003e1, \u0022%edx\u0022\u003d\u003e2, \u0022%ebx\u0022\u003d\u003e3,\n \t\t\u0022%esp\u0022\u003d\u003e4, \u0022%ebp\u0022\u003d\u003e5, \u0022%esi\u0022\u003d\u003e6, \u0022%edi\u0022\u003d\u003e7\t);\n \n+sub rex {\n+ my $opcode\u003dshift;\n+ my ($dst,$src,$rex)\u003d@_;\n+\n+ $rex|\u003d0x04 if($dst\u003e\u003d8);\n+ $rex|\u003d0x01 if($src\u003e\u003d8);\n+ push @$opcode,($rex|0x40) if ($rex);\n+}\n+\n my $movq \u003d sub {\t# elderly gas can't handle inter-register movq\n my $arg \u003d shift;\n my @opcode\u003d(0x66);\n@@ -843,6 +849,10 @@ my $rdseed \u003d sub {\n }\n };\n \n+# Not all AVX-capable assemblers recognize AMD XOP extension. Since we\n+# are using only two instructions hand-code them in order to be excused\n+# from chasing assembler versions...\n+\n sub rxb {\n my $opcode\u003dshift;\n my ($dst,$src1,$src2,$rxb)\u003d@_;\n@@ -882,10 +892,15 @@ my $vprotq \u003d sub {\n }\n };\n \n+# Intel Control-flow Enforcement Technology extension. All functions and\n+# indirect branch targets will have to start with this instruction...\n+\n my $endbranch \u003d sub {\n (0xf3,0x0f,0x1e,0xfa);\n };\n \n+########################################################################\n+\n if ($nasm) {\n print \u003c\u003c___;\n default\trel\n","s":{"c":1753257166,"u": 28021}} ],"g": 30190,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}