From 9e7123b2d9aa377b4c2873c7836ff072f3c852dd Mon Sep 17 00:00:00 2001 From: tg74 Date: Wed, 13 Jan 2021 06:02:41 +0000 Subject: working on backport bugfix 0037785 git-svn-id: https://svn.freepascal.org/svn/fpc/branches/tg74@48151 3ad0048d-3df7-0310-abae-a5850022a9f2 --- fixes_3_2/compiler/i386/i386atts.inc | 8 ++++---- fixes_3_2/compiler/i386/i386nop.inc | 2 +- fixes_3_2/compiler/i386/i386tab.inc | 36 +++++++++++++++++++++++----------- fixes_3_2/compiler/i8086/i8086atts.inc | 8 ++++---- fixes_3_2/compiler/i8086/i8086nop.inc | 2 +- fixes_3_2/compiler/i8086/i8086tab.inc | 36 +++++++++++++++++++++++----------- fixes_3_2/compiler/x86/x86ins.dat | 26 +++++++++++++++--------- fixes_3_2/compiler/x86_64/x8664ats.inc | 8 ++++---- fixes_3_2/compiler/x86_64/x8664nop.inc | 2 +- fixes_3_2/compiler/x86_64/x8664tab.inc | 36 +++++++++++++++++++++++----------- 10 files changed, 107 insertions(+), 57 deletions(-) diff --git a/fixes_3_2/compiler/i386/i386atts.inc b/fixes_3_2/compiler/i386/i386atts.inc index 3d9024c499..fa3d7c0aaf 100644 --- a/fixes_3_2/compiler/i386/i386atts.inc +++ b/fixes_3_2/compiler/i386/i386atts.inc @@ -425,9 +425,9 @@ attsufNONE, attsufNONE, attsufNONE, attsufINT, -attsufINT, attsufNONE, -attsufINT, +attsufNONE, +attsufNONE, attsufNONE, attsufNONE, attsufNONE, @@ -539,14 +539,14 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, -attsufINT, +attsufNONE, attsufNONE, attsufINT, attsufNONE, attsufNONE, attsufNONE, attsufNONE, -attsufINT, +attsufNONE, attsufNONE, attsufNONE, attsufNONE, diff --git a/fixes_3_2/compiler/i386/i386nop.inc b/fixes_3_2/compiler/i386/i386nop.inc index 9e0fad8df4..dbc8c7ec1d 100644 --- a/fixes_3_2/compiler/i386/i386nop.inc +++ b/fixes_3_2/compiler/i386/i386nop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from x86ins.dat } -2117; +2119; diff --git a/fixes_3_2/compiler/i386/i386tab.inc b/fixes_3_2/compiler/i386/i386tab.inc index 7f5cd96ab9..28f1c4d3b4 100644 --- a/fixes_3_2/compiler/i386/i386tab.inc +++ b/fixes_3_2/compiler/i386/i386tab.inc @@ -9992,14 +9992,7 @@ ( opcode : A_VCVTDQ2PD; ops : 2; - optypes : (ot_ymmreg,ot_xmmreg,ot_none,ot_none); - code : #219#242#244#248#1#230#72; - flags : [if_avx,if_sandybridge] - ), - ( - opcode : A_VCVTDQ2PD; - ops : 2; - optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none); + optypes : (ot_ymmreg,ot_xmmrm,ot_none,ot_none); code : #219#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), @@ -10017,6 +10010,13 @@ code : #242#244#248#1#91#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTPD2DQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #220#242#244#248#1#230#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTPD2DQ; ops : 2; @@ -10027,10 +10027,17 @@ ( opcode : A_VCVTPD2DQ; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #220#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTPD2PS; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #241#242#244#248#1#90#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTPD2PS; ops : 2; @@ -10041,7 +10048,7 @@ ( opcode : A_VCVTPD2PS; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #241#242#244#248#1#90#72; flags : [if_avx,if_sandybridge] ), @@ -10178,6 +10185,13 @@ code : #219#242#243#248#1#45#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTTPD2DQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #241#242#244#248#1#230#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTTPD2DQ; ops : 2; @@ -10188,7 +10202,7 @@ ( opcode : A_VCVTTPD2DQ; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #241#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), diff --git a/fixes_3_2/compiler/i8086/i8086atts.inc b/fixes_3_2/compiler/i8086/i8086atts.inc index a920ca7ef1..5c57169d9b 100644 --- a/fixes_3_2/compiler/i8086/i8086atts.inc +++ b/fixes_3_2/compiler/i8086/i8086atts.inc @@ -425,9 +425,9 @@ attsufNONE, attsufNONE, attsufNONE, attsufINT, -attsufINT, attsufNONE, -attsufINT, +attsufNONE, +attsufNONE, attsufNONE, attsufNONE, attsufNONE, @@ -539,14 +539,14 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, -attsufINT, +attsufNONE, attsufNONE, attsufINT, attsufNONE, attsufNONE, attsufNONE, attsufNONE, -attsufINT, +attsufNONE, attsufNONE, attsufNONE, attsufNONE, diff --git a/fixes_3_2/compiler/i8086/i8086nop.inc b/fixes_3_2/compiler/i8086/i8086nop.inc index 3edc5df1f5..d24e36a0b4 100644 --- a/fixes_3_2/compiler/i8086/i8086nop.inc +++ b/fixes_3_2/compiler/i8086/i8086nop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from x86ins.dat } -2149; +2151; diff --git a/fixes_3_2/compiler/i8086/i8086tab.inc b/fixes_3_2/compiler/i8086/i8086tab.inc index 0e86e7469d..efafcc9ca1 100644 --- a/fixes_3_2/compiler/i8086/i8086tab.inc +++ b/fixes_3_2/compiler/i8086/i8086tab.inc @@ -10020,14 +10020,7 @@ ( opcode : A_VCVTDQ2PD; ops : 2; - optypes : (ot_ymmreg,ot_xmmreg,ot_none,ot_none); - code : #219#242#244#248#1#230#72; - flags : [if_avx,if_sandybridge] - ), - ( - opcode : A_VCVTDQ2PD; - ops : 2; - optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none); + optypes : (ot_ymmreg,ot_xmmrm,ot_none,ot_none); code : #219#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), @@ -10045,6 +10038,13 @@ code : #242#244#248#1#91#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTPD2DQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #220#242#244#248#1#230#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTPD2DQ; ops : 2; @@ -10055,10 +10055,17 @@ ( opcode : A_VCVTPD2DQ; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #220#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTPD2PS; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #241#242#244#248#1#90#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTPD2PS; ops : 2; @@ -10069,7 +10076,7 @@ ( opcode : A_VCVTPD2PS; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #241#242#244#248#1#90#72; flags : [if_avx,if_sandybridge] ), @@ -10206,6 +10213,13 @@ code : #219#242#243#248#1#45#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTTPD2DQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #241#242#244#248#1#230#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTTPD2DQ; ops : 2; @@ -10216,7 +10230,7 @@ ( opcode : A_VCVTTPD2DQ; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #241#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), diff --git a/fixes_3_2/compiler/x86/x86ins.dat b/fixes_3_2/compiler/x86/x86ins.dat index c5dc33b3ad..963381995c 100644 --- a/fixes_3_2/compiler/x86/x86ins.dat +++ b/fixes_3_2/compiler/x86/x86ins.dat @@ -2343,7 +2343,7 @@ mmxreg,xmmreg \331\2\x0F\x2D\110 KATMAI,SSE,MMX xmmreg,rm32 \333\321\2\x0F\x2A\110 KATMAI,SSE xmmreg,rm64 \333\321\2\x0F\x2A\110 KATMAI,SSE,X86_64 -[CVTSS2SI,cvtss2siX] +[CVTSS2SI] (Ch_Wop2, Ch_Rop1) reg32|64,mem32 \333\320\2\x0F\x2D\110 KATMAI,SSE reg32|64,xmmreg \333\320\2\x0F\x2D\110 KATMAI,SSE @@ -2353,7 +2353,7 @@ reg32|64,xmmreg \333\320\2\x0F\x2D\110 KATMAI,SSE mmxreg,mem64 \331\2\x0F\x2C\110 KATMAI,SSE,MMX mmxreg,xmmreg \331\2\x0F\x2C\110 KATMAI,SSE,MMX -[CVTTSS2SI,cvttss2siX] +[CVTTSS2SI] (Ch_Wop2, Ch_Rop1) reg32|64,mem32 \333\320\2\x0F\x2C\110 KATMAI,SSE reg32|64,xmmreg \333\320\2\x0F\x2C\110 KATMAI,SSE @@ -2865,7 +2865,7 @@ xmmreg,xmmrm \361\2\x0F\x5B\110 WILLAMETTE,SSE2,SM xmmreg,xmmreg \2\x0F\x5A\110 WILLAMETTE,SSE2 ;,SQ xmmreg,mem64 \2\x0F\x5A\110 WILLAMETTE,SSE2 ;,SQ -[CVTSD2SI,cvtsd2siX] +[CVTSD2SI] (Ch_Wop2, Ch_Rop1) reg32,xmmreg \334\2\x0F\x2D\110 WILLAMETTE,SSE2 reg32,mem64 \334\2\x0F\x2D\110 WILLAMETTE,SSE2 @@ -2899,7 +2899,7 @@ xmmreg,xmmrm \361\2\x0F\xE6\110 WILLAMETTE,SSE2,SM (Ch_Wop2, Ch_Rop1) xmmreg,xmmrm \333\2\x0F\x5B\110 WILLAMETTE,SSE2,SM -[CVTTSD2SI,cvttsd2siX] +[CVTTSD2SI] (Ch_Wop2, Ch_Rop1) reg32|64,xmmreg \334\320\2\x0F\x2C\110 WILLAMETTE,SSE2 reg32|64,mem64 \334\320\2\x0F\x2C\110 WILLAMETTE,SSE2 @@ -4057,23 +4057,28 @@ xmmreg,xmmreg \362\370\1\x2F\110 AVX,SA (Ch_Wop2, Ch_Rop1) xmmreg,mem64 \333\362\370\1\xE6\110 AVX,SANDYBRIDGE xmmreg,xmmreg \333\362\370\1\xE6\110 AVX,SANDYBRIDGE -ymmreg,xmmreg \333\362\364\370\1\xE6\110 AVX,SANDYBRIDGE -ymmreg,mem128 \333\362\364\370\1\xE6\110 AVX,SANDYBRIDGE +ymmreg,xmmrm \333\362\364\370\1\xE6\110 AVX,SANDYBRIDGE [VCVTDQ2PS] (Ch_Wop2, Ch_Rop1) xmmreg,xmmrm \362\370\1\x5B\110 AVX,SANDYBRIDGE ymmreg,ymmrm \362\364\370\1\x5B\110 AVX,SANDYBRIDGE +; VCVTPD2DQ xmmreg_mz,mem256 must come first - map MemRefSize 256bits correct +; map all other MemrefSize to xmmreg, xmmrm [VCVTPD2DQ,vcvtpd2dqM] (Ch_Wop2, Ch_Rop1) +xmmreg,mem256 \334\362\364\370\1\xE6\110 AVX,SANDYBRIDGE xmmreg,xmmrm \334\362\370\1\xE6\110 AVX,SANDYBRIDGE -xmmreg,ymmrm \334\362\364\370\1\xE6\110 AVX,SANDYBRIDGE +xmmreg,ymmreg \334\362\364\370\1\xE6\110 AVX,SANDYBRIDGE +; VCVTPD2PS xmmreg_mz,mem256 must come first - map MemRefSize 256bits correct +; map all other MemrefSize to xmmreg, xmmrm [VCVTPD2PS,vcvtpd2psM] (Ch_Wop2, Ch_Rop1) +xmmreg,mem256 \361\362\364\370\1\x5A\110 AVX,SANDYBRIDGE xmmreg,xmmrm \361\362\370\1\x5A\110 AVX,SANDYBRIDGE -xmmreg,ymmrm \361\362\364\370\1\x5A\110 AVX,SANDYBRIDGE +xmmreg,ymmreg \361\362\364\370\1\x5A\110 AVX,SANDYBRIDGE [VCVTPS2DQ] (Ch_Wop2, Ch_Rop1) @@ -4120,10 +4125,13 @@ reg32,xmmreg \333\362\370\1\x2D\110 AVX,SA reg64,mem32 \333\362\363\370\1\x2D\110 AVX,SANDYBRIDGE reg64,xmmreg \333\362\363\370\1\x2D\110 AVX,SANDYBRIDGE +; VCVTTPD2DQ xmmreg_mz,mem256 must come first - map MemRefSize 256bits correct +; map all other MemrefSize to xmmreg, xmmrm [VCVTTPD2DQ,vcvttpd2dqM] (Ch_Wop2, Ch_Rop1) +xmmreg,mem256 \361\362\364\370\1\xE6\110 AVX,SANDYBRIDGE xmmreg,xmmrm \361\362\370\1\xE6\110 AVX,SANDYBRIDGE -xmmreg,ymmrm \361\362\364\370\1\xE6\110 AVX,SANDYBRIDGE +xmmreg,ymmreg \361\362\364\370\1\xE6\110 AVX,SANDYBRIDGE [VCVTTPS2DQ] (Ch_Wop2, Ch_Rop1) diff --git a/fixes_3_2/compiler/x86_64/x8664ats.inc b/fixes_3_2/compiler/x86_64/x8664ats.inc index 56551ab634..7b5ce37768 100644 --- a/fixes_3_2/compiler/x86_64/x8664ats.inc +++ b/fixes_3_2/compiler/x86_64/x8664ats.inc @@ -411,9 +411,9 @@ attsufNONE, attsufNONE, attsufNONE, attsufINT, -attsufINT, attsufNONE, -attsufINT, +attsufNONE, +attsufNONE, attsufNONE, attsufNONE, attsufNONE, @@ -525,14 +525,14 @@ attsufNONE, attsufNONE, attsufNONE, attsufNONE, -attsufINT, +attsufNONE, attsufNONE, attsufINT, attsufNONE, attsufNONE, attsufNONE, attsufNONE, -attsufINT, +attsufNONE, attsufNONE, attsufNONE, attsufNONE, diff --git a/fixes_3_2/compiler/x86_64/x8664nop.inc b/fixes_3_2/compiler/x86_64/x8664nop.inc index 7cd4db7b89..d792bf92a5 100644 --- a/fixes_3_2/compiler/x86_64/x8664nop.inc +++ b/fixes_3_2/compiler/x86_64/x8664nop.inc @@ -1,2 +1,2 @@ { don't edit, this file is generated from x86ins.dat } -2170; +2172; diff --git a/fixes_3_2/compiler/x86_64/x8664tab.inc b/fixes_3_2/compiler/x86_64/x8664tab.inc index ceeaa126de..64519356d8 100644 --- a/fixes_3_2/compiler/x86_64/x8664tab.inc +++ b/fixes_3_2/compiler/x86_64/x8664tab.inc @@ -10293,14 +10293,7 @@ ( opcode : A_VCVTDQ2PD; ops : 2; - optypes : (ot_ymmreg,ot_xmmreg,ot_none,ot_none); - code : #219#242#244#248#1#230#72; - flags : [if_avx,if_sandybridge] - ), - ( - opcode : A_VCVTDQ2PD; - ops : 2; - optypes : (ot_ymmreg,ot_memory or ot_bits128,ot_none,ot_none); + optypes : (ot_ymmreg,ot_xmmrm,ot_none,ot_none); code : #219#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), @@ -10318,6 +10311,13 @@ code : #242#244#248#1#91#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTPD2DQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #220#242#244#248#1#230#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTPD2DQ; ops : 2; @@ -10328,10 +10328,17 @@ ( opcode : A_VCVTPD2DQ; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #220#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTPD2PS; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #241#242#244#248#1#90#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTPD2PS; ops : 2; @@ -10342,7 +10349,7 @@ ( opcode : A_VCVTPD2PS; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #241#242#244#248#1#90#72; flags : [if_avx,if_sandybridge] ), @@ -10493,6 +10500,13 @@ code : #219#242#243#248#1#45#72; flags : [if_avx,if_sandybridge] ), + ( + opcode : A_VCVTTPD2DQ; + ops : 2; + optypes : (ot_xmmreg,ot_memory or ot_bits256,ot_none,ot_none); + code : #241#242#244#248#1#230#72; + flags : [if_avx,if_sandybridge] + ), ( opcode : A_VCVTTPD2DQ; ops : 2; @@ -10503,7 +10517,7 @@ ( opcode : A_VCVTTPD2DQ; ops : 2; - optypes : (ot_xmmreg,ot_ymmrm,ot_none,ot_none); + optypes : (ot_xmmreg,ot_ymmreg,ot_none,ot_none); code : #241#242#244#248#1#230#72; flags : [if_avx,if_sandybridge] ), -- cgit v1.2.1