diff options
author | miod <> | 2023-02-01 20:45:04 +0000 |
---|---|---|
committer | miod <> | 2023-02-01 20:45:04 +0000 |
commit | dc4b2cf3e0979364f14ff89a07ffafc47435e2e7 (patch) | |
tree | 58219f5c6538172b9d00f33bf48c9a61419ec7a0 /src/lib/libcrypto/modes/asm | |
parent | 86f42338b2994b620482c37e3d0d9fc3ba1f523b (diff) | |
download | openbsd-dc4b2cf3e0979364f14ff89a07ffafc47435e2e7.tar.gz openbsd-dc4b2cf3e0979364f14ff89a07ffafc47435e2e7.tar.bz2 openbsd-dc4b2cf3e0979364f14ff89a07ffafc47435e2e7.zip |
Move all data blocks from .text to .rodata and cleanup up and homogeneize code
responsible from getting the proper address of those blocks.
ok tb@ jsing@
Diffstat (limited to 'src/lib/libcrypto/modes/asm')
-rw-r--r-- | src/lib/libcrypto/modes/asm/ghash-x86.pl | 66 |
1 files changed, 25 insertions, 41 deletions
diff --git a/src/lib/libcrypto/modes/asm/ghash-x86.pl b/src/lib/libcrypto/modes/asm/ghash-x86.pl index 27492597ad..5e868a43ff 100644 --- a/src/lib/libcrypto/modes/asm/ghash-x86.pl +++ b/src/lib/libcrypto/modes/asm/ghash-x86.pl | |||
@@ -411,10 +411,8 @@ $S=12; # shift factor for rem_4bit | |||
411 | &mov ($inp,&wparam(0)); # load Xi | 411 | &mov ($inp,&wparam(0)); # load Xi |
412 | &mov ($Htbl,&wparam(1)); # load Htable | 412 | &mov ($Htbl,&wparam(1)); # load Htable |
413 | 413 | ||
414 | &call (&label("pic_point")); | 414 | &picsetup("eax"); |
415 | &set_label("pic_point"); | 415 | &picsymbol("eax", &label("rem_4bit"), "eax"); |
416 | &blindpop("eax"); | ||
417 | &lea ("eax",&DWP(&label("rem_4bit")."-".&label("pic_point"),"eax")); | ||
418 | 416 | ||
419 | &movz ($Zll,&BP(15,$inp)); | 417 | &movz ($Zll,&BP(15,$inp)); |
420 | 418 | ||
@@ -436,10 +434,8 @@ $S=12; # shift factor for rem_4bit | |||
436 | &mov ($inp,&wparam(2)); # load in | 434 | &mov ($inp,&wparam(2)); # load in |
437 | &mov ($Zlh,&wparam(3)); # load len | 435 | &mov ($Zlh,&wparam(3)); # load len |
438 | 436 | ||
439 | &call (&label("pic_point")); | 437 | &picsetup("eax"); |
440 | &set_label("pic_point"); | 438 | &picsymbol("eax", &label("rem_4bit"), "eax"); |
441 | &blindpop("eax"); | ||
442 | &lea ("eax",&DWP(&label("rem_4bit")."-".&label("pic_point"),"eax")); | ||
443 | 439 | ||
444 | &add ($Zlh,$inp); | 440 | &add ($Zlh,$inp); |
445 | &mov (&wparam(3),$Zlh); # len to point at the end of input | 441 | &mov (&wparam(3),$Zlh); # len to point at the end of input |
@@ -584,10 +580,8 @@ sub mmx_loop() { | |||
584 | &mov ($inp,&wparam(0)); # load Xi | 580 | &mov ($inp,&wparam(0)); # load Xi |
585 | &mov ($Htbl,&wparam(1)); # load Htable | 581 | &mov ($Htbl,&wparam(1)); # load Htable |
586 | 582 | ||
587 | &call (&label("pic_point")); | 583 | &picsetup("eax"); |
588 | &set_label("pic_point"); | 584 | &picsymbol("eax", &label("rem_4bit"), "eax"); |
589 | &blindpop("eax"); | ||
590 | &lea ("eax",&DWP(&label("rem_4bit")."-".&label("pic_point"),"eax")); | ||
591 | 585 | ||
592 | &movz ($Zll,&BP(15,$inp)); | 586 | &movz ($Zll,&BP(15,$inp)); |
593 | 587 | ||
@@ -618,10 +612,9 @@ sub mmx_loop() { | |||
618 | &mov ("ecx",&wparam(2)); # inp | 612 | &mov ("ecx",&wparam(2)); # inp |
619 | &mov ("edx",&wparam(3)); # len | 613 | &mov ("edx",&wparam(3)); # len |
620 | &mov ("ebp","esp"); # original %esp | 614 | &mov ("ebp","esp"); # original %esp |
621 | &call (&label("pic_point")); | 615 | |
622 | &set_label ("pic_point"); | 616 | &picsetup($rem_8bit); |
623 | &blindpop ($rem_8bit); | 617 | &picsymbol($rem_8bit, &label("rem_8bit"), $rem_8bit); |
624 | &lea ($rem_8bit,&DWP(&label("rem_8bit")."-".&label("pic_point"),$rem_8bit)); | ||
625 | 618 | ||
626 | &sub ("esp",512+16+16); # allocate stack frame... | 619 | &sub ("esp",512+16+16); # allocate stack frame... |
627 | &and ("esp",-64); # ...and align it | 620 | &and ("esp",-64); # ...and align it |
@@ -910,10 +903,8 @@ my ($Xhi,$Xi) = @_; | |||
910 | &mov ($Htbl,&wparam(0)); | 903 | &mov ($Htbl,&wparam(0)); |
911 | &mov ($Xip,&wparam(1)); | 904 | &mov ($Xip,&wparam(1)); |
912 | 905 | ||
913 | &call (&label("pic")); | 906 | &picsetup($const); |
914 | &set_label("pic"); | 907 | &picsymbol($const, &label("bswap"), $const); |
915 | &blindpop ($const); | ||
916 | &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); | ||
917 | 908 | ||
918 | &movdqu ($Hkey,&QWP(0,$Xip)); | 909 | &movdqu ($Hkey,&QWP(0,$Xip)); |
919 | &pshufd ($Hkey,$Hkey,0b01001110);# dword swap | 910 | &pshufd ($Hkey,$Hkey,0b01001110);# dword swap |
@@ -947,10 +938,8 @@ my ($Xhi,$Xi) = @_; | |||
947 | &mov ($Xip,&wparam(0)); | 938 | &mov ($Xip,&wparam(0)); |
948 | &mov ($Htbl,&wparam(1)); | 939 | &mov ($Htbl,&wparam(1)); |
949 | 940 | ||
950 | &call (&label("pic")); | 941 | &picsetup($const); |
951 | &set_label("pic"); | 942 | &picsymbol($const, &label("bswap"), $const); |
952 | &blindpop ($const); | ||
953 | &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); | ||
954 | 943 | ||
955 | &movdqu ($Xi,&QWP(0,$Xip)); | 944 | &movdqu ($Xi,&QWP(0,$Xip)); |
956 | &movdqa ($T3,&QWP(0,$const)); | 945 | &movdqa ($T3,&QWP(0,$const)); |
@@ -972,10 +961,8 @@ my ($Xhi,$Xi) = @_; | |||
972 | &mov ($inp,&wparam(2)); | 961 | &mov ($inp,&wparam(2)); |
973 | &mov ($len,&wparam(3)); | 962 | &mov ($len,&wparam(3)); |
974 | 963 | ||
975 | &call (&label("pic")); | 964 | &picsetup($const); |
976 | &set_label("pic"); | 965 | &picsymbol($const, &label("bswap"), $const); |
977 | &blindpop ($const); | ||
978 | &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); | ||
979 | 966 | ||
980 | &movdqu ($Xi,&QWP(0,$Xip)); | 967 | &movdqu ($Xi,&QWP(0,$Xip)); |
981 | &movdqa ($T3,&QWP(0,$const)); | 968 | &movdqa ($T3,&QWP(0,$const)); |
@@ -1138,10 +1125,8 @@ my ($Xhi,$Xi)=@_; | |||
1138 | &mov ($Htbl,&wparam(0)); | 1125 | &mov ($Htbl,&wparam(0)); |
1139 | &mov ($Xip,&wparam(1)); | 1126 | &mov ($Xip,&wparam(1)); |
1140 | 1127 | ||
1141 | &call (&label("pic")); | 1128 | &picsetup($const); |
1142 | &set_label("pic"); | 1129 | &picsymbol($const, &label("bswap"), $const); |
1143 | &blindpop ($const); | ||
1144 | &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); | ||
1145 | 1130 | ||
1146 | &movdqu ($Hkey,&QWP(0,$Xip)); | 1131 | &movdqu ($Hkey,&QWP(0,$Xip)); |
1147 | &pshufd ($Hkey,$Hkey,0b01001110);# dword swap | 1132 | &pshufd ($Hkey,$Hkey,0b01001110);# dword swap |
@@ -1161,10 +1146,8 @@ my ($Xhi,$Xi)=@_; | |||
1161 | &mov ($Xip,&wparam(0)); | 1146 | &mov ($Xip,&wparam(0)); |
1162 | &mov ($Htbl,&wparam(1)); | 1147 | &mov ($Htbl,&wparam(1)); |
1163 | 1148 | ||
1164 | &call (&label("pic")); | 1149 | &picsetup($const); |
1165 | &set_label("pic"); | 1150 | &picsymbol($const, &label("bswap"), $const); |
1166 | &blindpop ($const); | ||
1167 | &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); | ||
1168 | 1151 | ||
1169 | &movdqu ($Xi,&QWP(0,$Xip)); | 1152 | &movdqu ($Xi,&QWP(0,$Xip)); |
1170 | &movdqa ($Xn,&QWP(0,$const)); | 1153 | &movdqa ($Xn,&QWP(0,$const)); |
@@ -1186,10 +1169,8 @@ my ($Xhi,$Xi)=@_; | |||
1186 | &mov ($inp,&wparam(2)); | 1169 | &mov ($inp,&wparam(2)); |
1187 | &mov ($len,&wparam(3)); | 1170 | &mov ($len,&wparam(3)); |
1188 | 1171 | ||
1189 | &call (&label("pic")); | 1172 | &picsetup($const); |
1190 | &set_label("pic"); | 1173 | &picsymbol($const, &label("bswap"), $const); |
1191 | &blindpop ($const); | ||
1192 | &lea ($const,&DWP(&label("bswap")."-".&label("pic"),$const)); | ||
1193 | 1174 | ||
1194 | &movdqu ($Xi,&QWP(0,$Xip)); | 1175 | &movdqu ($Xi,&QWP(0,$Xip)); |
1195 | &movdqa ($T3,&QWP(0,$const)); | 1176 | &movdqa ($T3,&QWP(0,$const)); |
@@ -1270,11 +1251,14 @@ my ($Xhi,$Xi)=@_; | |||
1270 | 1251 | ||
1271 | } | 1252 | } |
1272 | 1253 | ||
1254 | &rodataseg(); | ||
1273 | &set_label("bswap",64); | 1255 | &set_label("bswap",64); |
1274 | &data_byte(15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0); | 1256 | &data_byte(15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0); |
1275 | &data_byte(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2); # 0x1c2_polynomial | 1257 | &data_byte(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2); # 0x1c2_polynomial |
1258 | &previous(); | ||
1276 | }} # $sse2 | 1259 | }} # $sse2 |
1277 | 1260 | ||
1261 | &rodataseg(); | ||
1278 | &set_label("rem_4bit",64); | 1262 | &set_label("rem_4bit",64); |
1279 | &data_word(0,0x0000<<$S,0,0x1C20<<$S,0,0x3840<<$S,0,0x2460<<$S); | 1263 | &data_word(0,0x0000<<$S,0,0x1C20<<$S,0,0x3840<<$S,0,0x2460<<$S); |
1280 | &data_word(0,0x7080<<$S,0,0x6CA0<<$S,0,0x48C0<<$S,0,0x54E0<<$S); | 1264 | &data_word(0,0x7080<<$S,0,0x6CA0<<$S,0,0x48C0<<$S,0,0x54E0<<$S); |
@@ -1313,9 +1297,9 @@ my ($Xhi,$Xi)=@_; | |||
1313 | &data_short(0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E); | 1297 | &data_short(0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E); |
1314 | &data_short(0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE); | 1298 | &data_short(0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE); |
1315 | &data_short(0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE); | 1299 | &data_short(0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE); |
1300 | &previous(); | ||
1316 | }}} # !$x86only | 1301 | }}} # !$x86only |
1317 | 1302 | ||
1318 | &asciz("GHASH for x86, CRYPTOGAMS by <appro\@openssl.org>"); | ||
1319 | &asm_finish(); | 1303 | &asm_finish(); |
1320 | 1304 | ||
1321 | # A question was risen about choice of vanilla MMX. Or rather why wasn't | 1305 | # A question was risen about choice of vanilla MMX. Or rather why wasn't |