Chinmay Rath
a9bd40d937
target/ppc: Move add and subf type fixed-point arithmetic instructions to decodetree
...
This patch moves the below instructions to decodetree specification:
{add, subf}[c,e,me,ze][o][.] : XO-form
addic[.], subfic : D-form
addex : Z23-form
This patch introduces XO form instructions into decode tree
specification, for which all the four variations([o][.]) have been
handled with a single pattern. The changes were verified by validating
that the tcg ops generated by those instructions remain the same, which
were captured with the '-d in_asm,op' flag.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com >
Signed-off-by: Chinmay Rath <rathc@linux.ibm.com >
Signed-off-by: Nicholas Piggin <npiggin@gmail.com >
2024-03-13 02:47:04 +10:00
Richard Henderson
ad75a51e84
tcg: Rename cpu_env to tcg_env
...
Allow the name 'cpu_env' to be used for something else.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-10-03 08:01:02 -07:00
Nicholas Piggin
718209358f
target/ppc: Fix LQ, STQ register-pair order for big-endian
...
LQ, STQ have the same register-pair ordering as LQARX/STQARX., which is
the even (lower) register contains the most significant bits. This is
not implemented correctly for big-endian.
do_ldst_quad() has variables low_addr_gpr and high_addr_gpr which is
confusing because they are low and high addresses, whereas LQARX/STQARX.
and most such things use the low and high values for lo/hi variables.
The conversion to native 128-bit memory access functions missed this
strangeness.
Fix this by changing the if condition, and change the variable names to
hi/lo to match convention.
Cc: qemu-stable@nongnu.org
Reported-by: Ivan Warren <ivan@vmfacility.fr >
Fixes: 57b38ffd0c
("target/ppc: Use tcg_gen_qemu_{ld,st}_i128 for LQARX, LQ, STQ")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1836
Signed-off-by: Nicholas Piggin <npiggin@gmail.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Cédric Le Goater <clg@kaod.org >
2023-09-06 11:19:33 +02:00
Richard Henderson
253d110dba
target/ppc: Use tcg_gen_negsetcond_*
...
Tested-by: Nicholas Piggin <npiggin@gmail.com >
Reviewed-by: Nicholas Piggin <npiggin@gmail.com >
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-08-24 11:22:42 -07:00
Richard Henderson
57b38ffd0c
target/ppc: Use tcg_gen_qemu_{ld,st}_i128 for LQARX, LQ, STQ
...
No need to roll our own, as this is now provided by tcg.
This was the last use of retxl, so remove that too.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-05-23 16:51:19 -07:00
Richard Henderson
4fe0e9db0a
target/ppc: Rewrite trans_ADDG6S
...
Compute all carry bits in parallel instead of a loop.
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-03-13 07:03:39 -07:00
Richard Henderson
571f850722
target/ppc: Drop tcg_temp_free
...
Translators are no longer required to free tcg temporaries.
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-03-05 13:44:08 -08:00
Víctor Colombo
53ae2aeb94
target/ppc: Implement hashstp and hashchkp
...
Implementation for instructions hashstp and hashchkp, the privileged
versions of hashst and hashchk, which were added in Power ISA 3.1B.
Signed-off-by: Víctor Colombo <victor.colombo@eldorado.org.br >
Reviewed-by: Lucas Mateus Castro <lucas.araujo@eldorado.org.br >
Message-Id: <20220715205439.161110-4-victor.colombo@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-09-20 10:54:06 -03:00
Víctor Colombo
670f1da374
target/ppc: Implement hashst and hashchk
...
Implementation for instructions hashst and hashchk, which were added
in Power ISA 3.1B.
It was decided to implement the hash algorithm from ground up in this
patch exactly as described in Power ISA.
Signed-off-by: Víctor Colombo <victor.colombo@eldorado.org.br >
Reviewed-by: Lucas Mateus Castro <lucas.araujo@eldorado.org.br >
Message-Id: <20220715205439.161110-3-victor.colombo@eldorado.org.br >
[danielhb: fix block comment in excp_helper.c]
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-09-20 10:54:06 -03:00
Matheus Ferst
fc34e81acd
target/ppc: add macros to check privilege level
...
Equivalent to CHK_SV and CHK_HV, but can be used in decodetree methods.
Reviewed-by: Leandro Lupori <leandro.lupori@eldorado.org.br >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Signed-off-by: Lucas Coutinho <lucas.coutinho@eldorado.org.br >
Message-Id: <20220701133507.740619-3-lucas.coutinho@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-07-18 13:59:43 -03:00
Matheus Ferst
6b924d4afc
target/ppc: implement cdtbcd
...
Implements the Convert Declets To Binary Coded Decimal instruction.
Since libdecnumber doesn't expose the methods for direct conversion
(decDigitsFromDPD, DPD2BCD, etc), a positive decimal32 with zero
exponent is used as an intermediate value to convert the declets.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Signed-off-by: Víctor Colombo <victor.colombo@eldorado.org.br >
Message-Id: <20220629162904.105060-12-victor.colombo@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-07-06 10:22:38 -03:00
Matheus Ferst
38d3690bda
target/ppc: implement cbcdtd
...
Implements the Convert Binary Coded Decimal To Declets instruction.
Since libdecnumber doesn't expose the methods for direct conversion
(decDigitsToDPD, BCD2DPD, etc.), the BCD values are converted to
decimal32 format, from which the declets are extracted.
Where the behavior is undefined, we try to match the result observed in
a POWER9 DD2.3.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Signed-off-by: Víctor Colombo <victor.colombo@eldorado.org.br >
Message-Id: <20220629162904.105060-11-victor.colombo@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-07-06 10:22:38 -03:00
Matheus Ferst
6addef4d27
target/ppc: implement addg6s
...
Implements the following Power ISA v2.06 instruction:
addg6s: Add and Generate Sixes
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Signed-off-by: Víctor Colombo <victor.colombo@eldorado.org.br >
Reviewed-by: Víctor Colombo <victor.colombo@eldorado.org.br >
Message-Id: <20220629162904.105060-10-victor.colombo@eldorado.org.br >
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com >
2022-07-06 10:22:38 -03:00
Frédéric Pétrot
fc313c6434
exec/memop: Adding signedness to quad definitions
...
Renaming defines for quad in their various forms so that their signedness is
now explicit.
Done using git grep as suggested by Philippe, with a bit of hand edition to
keep assignments aligned.
Signed-off-by: Frédéric Pétrot <frederic.petrot@univ-grenoble-alpes.fr >
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Alistair Francis <alistair.francis@wdc.com >
Message-id: 20220106210108.138226-2-frederic.petrot@univ-grenoble-alpes.fr
Signed-off-by: Alistair Francis <alistair.francis@wdc.com >
2022-01-08 15:46:10 +10:00
Matheus Ferst
ab1e25ad2f
target/ppc: cntlzdm/cnttzdm implementation without brcond
...
Suggested-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211104123719.323713-26-matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:53 +11:00
Matheus Ferst
a2c975e119
target/ppc: Implement vclzdm/vctzdm instructions
...
The signature of do_cntzdm is changed to allow reuse as GVecGen3i.fni8.
The method is also moved out of #ifdef TARGET_PPC64, as PowerISA doesn't
say vclzdm and vctzdm are 64-bit only.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Luis Pires <luis.pires@eldorado.org.br >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211104123719.323713-3-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:52 +11:00
Matheus Ferst
6e0bbc4048
target/ppc: Move vcfuged to vmx-impl.c.inc
...
There's no reason to keep vector-impl.c.inc separate from
vmx-impl.c.inc. Additionally, let GVec handle the multiple calls to
helper_cfuged for us.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211104123719.323713-2-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:52 +11:00
Matheus Ferst
8bdb760606
target/ppc: Implement pextd instruction
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211029202424.175401-11-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:52 +11:00
Matheus Ferst
21ba6e5873
target/ppc: Implement pdepd instruction
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211029202424.175401-10-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:52 +11:00
Luis Pires
f356b3ba47
target/ppc: Implement cnttzdm
...
Implement the following PowerISA v3.1 instruction:
cnttzdm: Count Trailing Zeros Doubleword Under Bit Mask
Suggested-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Luis Pires <luis.pires@eldorado.org.br >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211029202424.175401-9-matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:51 +11:00
Luis Pires
82be6e02b4
target/ppc: Implement cntlzdm
...
Implement the following PowerISA v3.1 instruction:
cntlzdm: Count Leading Zeros Doubleword Under Bit Mask
Suggested-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Luis Pires <luis.pires@eldorado.org.br >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211029202424.175401-8-matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:51 +11:00
Matheus Ferst
49de064889
target/ppc: Implement PLQ and PSTQ
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211029202424.175401-7-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:51 +11:00
Matheus Ferst
e10271e104
target/ppc: Move LQ and STQ to decodetree
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211029202424.175401-6-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:51 +11:00
Fernando Eckhardt Valle
725b2d4dac
target/ppc: move resolve_PLS_D to translate.c
...
Move resolve_PLS_D from fixedpoint-impl.c.inc to translate.c
because this way the function can be used not only by fixed
point instructions.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Fernando Eckhardt Valle <phervalle@gmail.com >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211029202424.175401-3-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:51 +11:00
Fernando Eckhardt Valle
eb63efd9f6
target/ppc: introduce do_ea_calc
...
The do_ea_calc function will calculate the effective address(EA)
according to PowerIsa 3.1. With that, it was replaced part of
do_ldst() that calculates the EA by this new function.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Fernando Eckhardt Valle (pherde) <phervalle@gmail.com >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20211029202424.175401-2-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-11-09 10:32:51 +11:00
Matheus Ferst
2d1154bd95
target/ppc: Ease L=0 requirement on cmp/cmpi/cmpl/cmpli for ppc32
...
In commit 8f0a4b6a9b
, we started to require L=0 for ppc32 to match what
The Programming Environments Manual say:
"For 32-bit implementations, the L field must be cleared, otherwise
the instruction form is invalid."
The stricter behavior, however, broke AROS boot on sam460ex, which is a
regression from 6.0. This patch partially reverts the change, raising
the exception only for CPUs known to require L=0 (e500 and e500mc) and
logging a guest error for other cases.
Both behaviors are acceptable by the PowerISA, which allows "the system
illegal instruction error handler to be invoked or yield boundedly
undefined results."
Reported-by: BALATON Zoltan <balaton@eik.bme.hu >
Fixes: 8f0a4b6a9b
("target/ppc: Move cmp/cmpi/cmpl/cmpli to decodetree")
Tested-by: BALATON Zoltan <balaton@eik.bme.hu >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210720135507.2444635-1-matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-07-29 10:59:49 +10:00
Matheus Ferst
8f0a4b6a9b
target/ppc: Move cmp/cmpi/cmpl/cmpli to decodetree
...
Additionally, REQUIRE_64BIT when L=1 to match what is specified in The
Programming Environments Manual:
"For 32-bit implementations, the L field must be cleared, otherwise the
instruction form is invalid."
Some CPUs are known to deviate from this specification by ignoring the
L bit [1]. The stricter behavior, however, can help users that test
software with qemu, making it more likely to detect bugs that would
otherwise be silent.
If deemed necessary, a future patch can adapt this behavior based on
the specific CPU model.
[1] The 601 manual is the only one I've found that explicitly states
that the L bit is ignored, but we also observe this behavior in a 7447A
v1.2.
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-15-matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
[dwg: Corrected whitespace error]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Matheus Ferst
e7a5d578f7
target/ppc: Move addpcis to decodetree
...
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-14-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Matheus Ferst
89ccd7dc3f
target/ppc: Implement cfuged instruction
...
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-12-matheus.ferst@eldorado.org.br >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Matheus Ferst
9a14365eeb
target/ppc: Implement setbc/setbcr/stnbc/setnbcr instructions
...
Implements the following PowerISA v3.1 instructions:
setbc: Set Boolean Condition
setbcr: Set Boolean Condition Reverse
setnbc: Set Negative Boolean Condition
setnbcr: Set Negative Boolean Condition Reverse
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-11-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Richard Henderson
b0f7bebc6d
target/ppc: Implement prefixed integer store instructions
...
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-10-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Richard Henderson
e8f4c8d6aa
target/ppc: Move D/DS/X-form integer stores to decodetree
...
These are all connected by macros in the legacy decoding.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-9-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Richard Henderson
00e0326541
target/ppc: Implement prefixed integer load instructions
...
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-8-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Richard Henderson
f2aabda8ac
target/ppc: Move D/DS/X-form integer loads to decodetree
...
These are all connected by macros in the legacy decoding.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-7-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Richard Henderson
0a11bb7a35
target/ppc: Implement PNOP
...
The illegal suffix behavior matches what was observed in a
POWER10 DD2.0 machine.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-6-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Richard Henderson
5e56086423
target/ppc: Move ADDI, ADDIS to decodetree, implement PADDI
...
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-5-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00
Richard Henderson
99082815f1
target/ppc: Add infrastructure for prefixed insns
...
Signed-off-by: Luis Pires <luis.pires@eldorado.org.br >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br >
Message-Id: <20210601193528.2533031-4-matheus.ferst@eldorado.org.br >
Signed-off-by: David Gibson <david@gibson.dropbear.id.au >
2021-06-03 18:10:31 +10:00