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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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