From b007dbc74379a07c54f0fe888925e0c8534b8635 Mon Sep 17 00:00:00 2001 From: Maxim Poliakovski Date: Fri, 31 Jan 2020 18:04:50 +0100 Subject: [PATCH] More PPC instruction tests. --- cpu/ppc/test/genppctests.py | 26 ++++- cpu/ppc/test/instruction_tests_console.txt | 3 - cpu/ppc/test/ppcinttests.csv | 114 +++++++++++++++++++++ cpu/ppc/test/ppctests.cpp | 9 +- 4 files changed, 142 insertions(+), 10 deletions(-) diff --git a/cpu/ppc/test/genppctests.py b/cpu/ppc/test/genppctests.py index 4d5b42f..9ada81e 100644 --- a/cpu/ppc/test/genppctests.py +++ b/cpu/ppc/test/genppctests.py @@ -45,6 +45,30 @@ def gen_ppc_opcode(opc_str, imm): return (0x1F << 26) + (3 << 21) + (3 << 16) + (0x2CA << 1) elif opc_str == "ADDZEO.": return (0x1F << 26) + (3 << 21) + (3 << 16) + (0x2CA << 1) + 1 + elif opc_str == "AND": + return (0x1F << 26) + (3 << 21) + (3 << 16) + (4 << 11) + (0x1C << 1) + elif opc_str == "AND.": + return (0x1F << 26) + (3 << 21) + (3 << 16) + (4 << 11) + (0x1C << 1) + 1 + elif opc_str == "ANDC": + return (0x1F << 26) + (3 << 21) + (3 << 16) + (4 << 11) + (0x3C << 1) + elif opc_str == "ANDC.": + return (0x1F << 26) + (3 << 21) + (3 << 16) + (4 << 11) + (0x3C << 1) + 1 + elif opc_str == "ANDI.": + return (0x1C << 26) + (3 << 21) + (3 << 16) + (imm & 0xFFFF) + elif opc_str == "ANDIS.": + return (0x1D << 26) + (3 << 21) + (3 << 16) + (imm & 0xFFFF) + elif opc_str == "CMP": + return (0x1F << 26) + (3 << 16) + (4 << 11) + elif opc_str == "CMPI": + return (0x0B << 26) + (0 << 21) + (3 << 16) + (imm & 0xFFFF) + elif opc_str == "CMPL": + return (0x1F << 26) + (3 << 16) + (4 << 11) + (0x20 << 1) + elif opc_str == "CMPLI": + return (0x0A << 26) + (0 << 21) + (3 << 16) + (imm & 0xFFFF) + elif opc_str == "CNTLZW": + return (0x1F << 26) + (3 << 21) + (3 << 16) + (0x1A << 1) + elif opc_str == "CNTLZW.": + return (0x1F << 26) + (3 << 21) + (3 << 16) + (0x1A << 1) + 1 def find_imm(line): @@ -102,5 +126,5 @@ with open("instruction_tests_console.txt", "r") as in_file: out_file.write("\n") lineno += 1 - if lineno > 152: + if lineno > 266: break diff --git a/cpu/ppc/test/instruction_tests_console.txt b/cpu/ppc/test/instruction_tests_console.txt index 6ef47d2..126a3d5 100644 --- a/cpu/ppc/test/instruction_tests_console.txt +++ b/cpu/ppc/test/instruction_tests_console.txt @@ -151,7 +151,6 @@ ADDZEO. :: rD 0xFFFFFFFF | rA 0xFFFFFFFF | XER: 0x00000000 | CR: 0x80000000 ADDZEO. :: rD 0xFFFFFFFF | rA 0xFFFFFFFF | XER: 0x00000000 | CR: 0x80000000 ADDZEO. :: rD 0x00000001 | rA 0x00000001 | XER: 0x00000000 | CR: 0x40000000 ADDZEO. :: rD 0x00000000 | rA 0x00000000 | XER: 0x00000000 | CR: 0x20000000 -AND Variants AND :: rD 0x00000000 | rA 0x00000000 | rB 0x00000000 | XER: 0x00000000 | CR: 0x00000000 AND :: rD 0x00000000 | rA 0x00000000 | rB 0x00000001 | XER: 0x00000000 | CR: 0x00000000 AND :: rD 0x00000001 | rA 0x00000001 | rB 0x00000001 | XER: 0x00000000 | CR: 0x00000000 @@ -182,7 +181,6 @@ ANDIS. :: rD 0x00000000 | rA 0x00000000 | imm 0x00000001 | XER: 0x00000000 | C ANDIS. :: rD 0x00000000 | rA 0x00000001 | imm 0x00000001 | XER: 0x00000000 | CR: 0x20000000 ANDIS. :: rD 0x00000000 | rA 0xFFFFFFFF | imm 0x00000000 | XER: 0x00000000 | CR: 0x20000000 ANDIS. :: rD 0x00010000 | rA 0xFFFFFFFF | imm 0x00000001 | XER: 0x00000000 | CR: 0x40000000 -CMP Variants CMP :: rA 0x00000000 | rB 0x00000000 | XER: 0x00000000 | CR: 0x20000000 CMP :: rA 0x00000000 | rB 0x00000001 | XER: 0x00000000 | CR: 0x80000000 CMP :: rA 0x00000001 | rB 0x00000000 | XER: 0x00000000 | CR: 0x40000000 @@ -203,7 +201,6 @@ CMPLI :: rA 0x00000000 | imm 0x00000001 | XER: 0x00000000 | CR: 0x80000000 CMPLI :: rA 0x00000001 | imm 0x00000000 | XER: 0x00000000 | CR: 0x40000000 CMPLI :: rA 0x00007FFF | imm 0x00007FFF | XER: 0x00000000 | CR: 0x20000000 CMPLI :: rA 0x00002FFF | imm 0x00001FFF | XER: 0x00000000 | CR: 0x40000000 -CNTLZW Variants CNTLZW :: rD 0x0000001F | rA 0x00000001 | XER: 0x00000000 | CR: 0x00000000 CNTLZW :: rD 0x0000001E | rA 0x00000002 | XER: 0x00000000 | CR: 0x00000000 CNTLZW :: rD 0x0000001D | rA 0x00000004 | XER: 0x00000000 | CR: 0x00000000 diff --git a/cpu/ppc/test/ppcinttests.csv b/cpu/ppc/test/ppcinttests.csv index 2037c85..a5ac3c0 100644 --- a/cpu/ppc/test/ppcinttests.csv +++ b/cpu/ppc/test/ppcinttests.csv @@ -151,3 +151,117 @@ ADDZEO.,0x7C630595,rD=0xFFFFFFFF,rA=0xFFFFFFFF,XER=0x00000000,CR=0x80000000 ADDZEO.,0x7C630595,rD=0xFFFFFFFF,rA=0xFFFFFFFF,XER=0x00000000,CR=0x80000000 ADDZEO.,0x7C630595,rD=0x00000001,rA=0x00000001,XER=0x00000000,CR=0x40000000 ADDZEO.,0x7C630595,rD=0x00000000,rA=0x00000000,XER=0x00000000,CR=0x20000000 +AND,0x7C632038,rD=0x00000000,rA=0x00000000,rB=0x00000000,XER=0x00000000,CR=0x00000000 +AND,0x7C632038,rD=0x00000000,rA=0x00000000,rB=0x00000001,XER=0x00000000,CR=0x00000000 +AND,0x7C632038,rD=0x00000001,rA=0x00000001,rB=0x00000001,XER=0x00000000,CR=0x00000000 +AND,0x7C632038,rD=0x00000000,rA=0xFFFFFFFF,rB=0x00000000,XER=0x00000000,CR=0x00000000 +AND,0x7C632038,rD=0x00000001,rA=0xFFFFFFFF,rB=0x00000001,XER=0x00000000,CR=0x00000000 +AND.,0x7C632039,rD=0x00000000,rA=0x00000000,rB=0x00000000,XER=0x00000000,CR=0x20000000 +AND.,0x7C632039,rD=0x00000000,rA=0x00000000,rB=0x00000001,XER=0x00000000,CR=0x20000000 +AND.,0x7C632039,rD=0x00000001,rA=0x00000001,rB=0x00000001,XER=0x00000000,CR=0x40000000 +AND.,0x7C632039,rD=0x00000000,rA=0xFFFFFFFF,rB=0x00000000,XER=0x00000000,CR=0x20000000 +AND.,0x7C632039,rD=0x00000001,rA=0xFFFFFFFF,rB=0x00000001,XER=0x00000000,CR=0x40000000 +ANDC,0x7C632078,rD=0x00000000,rA=0x00000000,rB=0x00000000,XER=0x00000000,CR=0x00000000 +ANDC,0x7C632078,rD=0x00000000,rA=0x00000000,rB=0x00000001,XER=0x00000000,CR=0x00000000 +ANDC,0x7C632078,rD=0x00000000,rA=0x00000001,rB=0x00000001,XER=0x00000000,CR=0x00000000 +ANDC,0x7C632078,rD=0xFFFFFFFF,rA=0xFFFFFFFF,rB=0x00000000,XER=0x00000000,CR=0x00000000 +ANDC,0x7C632078,rD=0xFFFFFFFE,rA=0xFFFFFFFF,rB=0x00000001,XER=0x00000000,CR=0x00000000 +ANDC.,0x7C632079,rD=0x00000000,rA=0x00000000,rB=0x00000000,XER=0x00000000,CR=0x20000000 +ANDC.,0x7C632079,rD=0x00000000,rA=0x00000000,rB=0x00000001,XER=0x00000000,CR=0x20000000 +ANDC.,0x7C632079,rD=0x00000000,rA=0x00000001,rB=0x00000001,XER=0x00000000,CR=0x20000000 +ANDC.,0x7C632079,rD=0xFFFFFFFF,rA=0xFFFFFFFF,rB=0x00000000,XER=0x00000000,CR=0x80000000 +ANDC.,0x7C632079,rD=0xFFFFFFFE,rA=0xFFFFFFFF,rB=0x00000001,XER=0x00000000,CR=0x80000000 +ANDI.,0x70630000,rD=0x00000000,rA=0x00000000,XER=0x00000000,CR=0x20000000 +ANDI.,0x70630001,rD=0x00000000,rA=0x00000000,XER=0x00000000,CR=0x20000000 +ANDI.,0x70630001,rD=0x00000001,rA=0x00000001,XER=0x00000000,CR=0x40000000 +ANDI.,0x70630000,rD=0x00000000,rA=0xFFFFFFFF,XER=0x00000000,CR=0x20000000 +ANDI.,0x70630001,rD=0x00000001,rA=0xFFFFFFFF,XER=0x00000000,CR=0x40000000 +ANDIS.,0x74630000,rD=0x00000000,rA=0x00000000,XER=0x00000000,CR=0x20000000 +ANDIS.,0x74630001,rD=0x00000000,rA=0x00000000,XER=0x00000000,CR=0x20000000 +ANDIS.,0x74630001,rD=0x00000000,rA=0x00000001,XER=0x00000000,CR=0x20000000 +ANDIS.,0x74630000,rD=0x00000000,rA=0xFFFFFFFF,XER=0x00000000,CR=0x20000000 +ANDIS.,0x74630001,rD=0x00010000,rA=0xFFFFFFFF,XER=0x00000000,CR=0x40000000 +CMP,0x7C032000,rA=0x00000000,rB=0x00000000,XER=0x00000000,CR=0x20000000 +CMP,0x7C032000,rA=0x00000000,rB=0x00000001,XER=0x00000000,CR=0x80000000 +CMP,0x7C032000,rA=0x00000001,rB=0x00000000,XER=0x00000000,CR=0x40000000 +CMP,0x7C032000,rA=0x7FFFFFFF,rB=0x7FFFFFFF,XER=0x00000000,CR=0x20000000 +CMP,0x7C032000,rA=0xFFFFFFFF,rB=0xFFFFFFFF,XER=0x00000000,CR=0x20000000 +CMPI,0x2C030000,rA=0x00000000,XER=0x00000000,CR=0x20000000 +CMPI,0x2C030001,rA=0x00000000,XER=0x00000000,CR=0x80000000 +CMPI,0x2C030000,rA=0x00000001,XER=0x00000000,CR=0x40000000 +CMPI,0x2C037FFF,rA=0x00007FFF,XER=0x00000000,CR=0x20000000 +CMPI,0x2C031FFF,rA=0x00002FFF,XER=0x00000000,CR=0x40000000 +CMPL,0x7C032040,rA=0x00000000,rB=0x00000000,XER=0x00000000,CR=0x20000000 +CMPL,0x7C032040,rA=0x00000000,rB=0x00000001,XER=0x00000000,CR=0x80000000 +CMPL,0x7C032040,rA=0x00000001,rB=0x00000000,XER=0x00000000,CR=0x40000000 +CMPL,0x7C032040,rA=0x7FFFFFFF,rB=0x7FFFFFFF,XER=0x00000000,CR=0x20000000 +CMPL,0x7C032040,rA=0xFFFFFFFF,rB=0xFFFFFFFF,XER=0x00000000,CR=0x20000000 +CMPLI,0x28030000,rA=0x00000000,XER=0x00000000,CR=0x20000000 +CMPLI,0x28030001,rA=0x00000000,XER=0x00000000,CR=0x80000000 +CMPLI,0x28030000,rA=0x00000001,XER=0x00000000,CR=0x40000000 +CMPLI,0x28037FFF,rA=0x00007FFF,XER=0x00000000,CR=0x20000000 +CMPLI,0x28031FFF,rA=0x00002FFF,XER=0x00000000,CR=0x40000000 +CNTLZW,0x7C630034,rD=0x0000001F,rA=0x00000001,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000001E,rA=0x00000002,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000001D,rA=0x00000004,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000001C,rA=0x00000008,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000001B,rA=0x00000010,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000001A,rA=0x00000020,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000019,rA=0x00000040,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000018,rA=0x00000080,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000017,rA=0x00000100,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000016,rA=0x00000200,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000015,rA=0x00000400,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000014,rA=0x00000800,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000013,rA=0x00001000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000012,rA=0x00002000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000011,rA=0x00004000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000010,rA=0x00008000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000000F,rA=0x00010000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000000E,rA=0x00020000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000000D,rA=0x00040000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000000C,rA=0x00080000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000000B,rA=0x00100000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x0000000A,rA=0x00200000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000009,rA=0x00400000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000008,rA=0x00800000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000007,rA=0x01000000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000006,rA=0x02000000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000005,rA=0x04000000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000004,rA=0x08000000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000003,rA=0x10000000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000002,rA=0x20000000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000001,rA=0x40000000,XER=0x00000000,CR=0x00000000 +CNTLZW,0x7C630034,rD=0x00000000,rA=0x80000000,XER=0x00000000,CR=0x00000000 +CNTLZW.,0x7C630035,rD=0x0000001F,rA=0x00000001,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000001E,rA=0x00000002,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000001D,rA=0x00000004,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000001C,rA=0x00000008,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000001B,rA=0x00000010,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000001A,rA=0x00000020,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000019,rA=0x00000040,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000018,rA=0x00000080,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000017,rA=0x00000100,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000016,rA=0x00000200,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000015,rA=0x00000400,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000014,rA=0x00000800,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000013,rA=0x00001000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000012,rA=0x00002000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000011,rA=0x00004000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000010,rA=0x00008000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000000F,rA=0x00010000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000000E,rA=0x00020000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000000D,rA=0x00040000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000000C,rA=0x00080000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000000B,rA=0x00100000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x0000000A,rA=0x00200000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000009,rA=0x00400000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000008,rA=0x00800000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000007,rA=0x01000000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000006,rA=0x02000000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000005,rA=0x04000000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000004,rA=0x08000000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000003,rA=0x10000000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000002,rA=0x20000000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000001,rA=0x40000000,XER=0x00000000,CR=0x40000000 +CNTLZW.,0x7C630035,rD=0x00000000,rA=0x80000000,XER=0x00000000,CR=0x20000000 diff --git a/cpu/ppc/test/ppctests.cpp b/cpu/ppc/test/ppctests.cpp index 6366242..a35e5f1 100644 --- a/cpu/ppc/test/ppctests.cpp +++ b/cpu/ppc/test/ppctests.cpp @@ -4,7 +4,6 @@ #include #include #include -//#include "ppcdisasm.h" #include "../ppcemu.h" using namespace std; @@ -17,8 +16,6 @@ void read_test_data() { string line, token; int i, lineno; - //PPCDisasmContext ctx; - //vector tstvec; uint32_t opcode, dest, src1, src2, check_xer, check_cr; ifstream tfstream("ppcinttests.csv"); @@ -43,7 +40,7 @@ void read_test_data() tokens.push_back(token); } - if (tokens.size() < 6) { + if (tokens.size() < 5) { cout << "Too few values in line " << lineno << ". Skipping..." << endl; continue; } @@ -85,7 +82,7 @@ void read_test_data() ntested++; - if ((ppc_state.ppc_gpr[3] != dest) || + if ((tokens[0].rfind("CMP") && (ppc_state.ppc_gpr[3] != dest)) || (ppc_state.ppc_spr[SPR::XER] != check_xer) || (ppc_state.ppc_cr != check_cr)) { cout << "Mismatch: instr=" << tokens[0] << ", src1=0x" << hex << src1 @@ -94,7 +91,7 @@ void read_test_data() << check_xer << ", CR=0x" << hex << check_cr << endl; cout << "got: dest=0x" << hex << ppc_state.ppc_gpr[3] << ", XER=0x" << hex << ppc_state.ppc_spr[SPR::XER] << ", CR=0x" << hex - << ppc_state.ppc_cr << endl; + << ppc_state.ppc_cr << endl << endl; nfailed++; }