* [Qemu-devel] [PATCH 0/2] mips: Allow more 'Chip specific instructions' flags
@ 2018-09-09 1:34 Philippe Mathieu-Daudé
2018-09-09 1:34 ` [Qemu-devel] [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size Philippe Mathieu-Daudé
2018-09-09 1:34 ` [Qemu-devel] [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores Philippe Mathieu-Daudé
0 siblings, 2 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-09-09 1:34 UTC (permalink / raw)
To: Aleksandar Markovic, Richard Henderson, Fredrik Noring
Cc: Philippe Mathieu-Daudé, qemu-devel, Aurelien Jarno
Hi,
After noticing Fredrik patch [1] clashes with an ongoing work, I shared my
concerns after the current limitations of CPUMIPSState::insn_flags, having
1 bit left to store more 'Chip specific instructions'.
The first patch drop this restriction,
the second simply add definitions for 2 Toshiba cores.
Regards,
Phil.
[1] http://lists.nongnu.org/archive/html/qemu-devel/2018-07/msg01978.html
[2] http://lists.nongnu.org/archive/html/qemu-devel/2018-09/msg00901.html
Philippe Mathieu-Daudé (2):
target/mips: Increase the 'supported instructions' flags holder size
target/mips: Add entries for the Toshiba's R3900 and R5900 cores
target/mips/cpu.h | 2 +-
target/mips/internal.h | 2 +-
target/mips/mips-defs.h | 2 ++
target/mips/translate.c | 4 ++--
4 files changed, 6 insertions(+), 4 deletions(-)
--
2.19.0.rc2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size
2018-09-09 1:34 [Qemu-devel] [PATCH 0/2] mips: Allow more 'Chip specific instructions' flags Philippe Mathieu-Daudé
@ 2018-09-09 1:34 ` Philippe Mathieu-Daudé
2018-09-11 9:33 ` Aleksandar Markovic
2018-09-09 1:34 ` [Qemu-devel] [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores Philippe Mathieu-Daudé
1 sibling, 1 reply; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-09-09 1:34 UTC (permalink / raw)
To: Fredrik Noring, Aleksandar Markovic, Richard Henderson
Cc: Philippe Mathieu-Daudé, qemu-devel, Aurelien Jarno
Currently this holder is limited to at most 32 flags on
a 32-bit architecture, which lets an unique bit available
for another 'chip specific instructions' flag.
Relax this limit using a 64-bit integer.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
target/mips/cpu.h | 2 +-
target/mips/internal.h | 2 +-
target/mips/translate.c | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/target/mips/cpu.h b/target/mips/cpu.h
index 28af4d191c..f2a5031fd2 100644
--- a/target/mips/cpu.h
+++ b/target/mips/cpu.h
@@ -614,7 +614,7 @@ struct CPUMIPSState {
int CCRes; /* Cycle count resolution/divisor */
uint32_t CP0_Status_rw_bitmask; /* Read/write bits in CP0_Status */
uint32_t CP0_TCStatus_rw_bitmask; /* Read/write bits in CP0_TCStatus */
- int insn_flags; /* Supported instruction set */
+ uint64_t insn_flags; /* Supported instruction set */
/* Fields up to this point are cleared by a CPU reset */
struct {} end_reset_fields;
diff --git a/target/mips/internal.h b/target/mips/internal.h
index e41051f8e6..bfe83ee613 100644
--- a/target/mips/internal.h
+++ b/target/mips/internal.h
@@ -59,7 +59,7 @@ struct mips_def_t {
int32_t CP0_PageGrain_rw_bitmask;
int32_t CP0_PageGrain;
target_ulong CP0_EBaseWG_rw_bitmask;
- int insn_flags;
+ uint64_t insn_flags;
enum mips_mmu_types mmu_type;
};
diff --git a/target/mips/translate.c b/target/mips/translate.c
index ab16cdb911..3b4e9ebae9 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -1870,7 +1870,7 @@ static inline void check_dspr2(DisasContext *ctx)
/* This code generates a "reserved instruction" exception if the
CPU does not support the instruction set corresponding to flags. */
-static inline void check_insn(DisasContext *ctx, int flags)
+static inline void check_insn(DisasContext *ctx, uint64_t flags)
{
if (unlikely(!(ctx->insn_flags & flags))) {
generate_exception_end(ctx, EXCP_RI);
@@ -1880,7 +1880,7 @@ static inline void check_insn(DisasContext *ctx, int flags)
/* This code generates a "reserved instruction" exception if the
CPU has corresponding flag set which indicates that the instruction
has been removed. */
-static inline void check_insn_opc_removed(DisasContext *ctx, int flags)
+static inline void check_insn_opc_removed(DisasContext *ctx, uint64_t flags)
{
if (unlikely(ctx->insn_flags & flags)) {
generate_exception_end(ctx, EXCP_RI);
--
2.19.0.rc2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores
2018-09-09 1:34 [Qemu-devel] [PATCH 0/2] mips: Allow more 'Chip specific instructions' flags Philippe Mathieu-Daudé
2018-09-09 1:34 ` [Qemu-devel] [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size Philippe Mathieu-Daudé
@ 2018-09-09 1:34 ` Philippe Mathieu-Daudé
2018-09-11 10:18 ` Aleksandar Markovic
1 sibling, 1 reply; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-09-09 1:34 UTC (permalink / raw)
To: Fredrik Noring, Aleksandar Markovic
Cc: Philippe Mathieu-Daudé,
qemu-devel, Richard Henderson, Aurelien Jarno
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
target/mips/mips-defs.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/target/mips/mips-defs.h b/target/mips/mips-defs.h
index c8e99791ad..9875bdac82 100644
--- a/target/mips/mips-defs.h
+++ b/target/mips/mips-defs.h
@@ -56,6 +56,8 @@
#define INSN_LOONGSON2E 0x20000000
#define INSN_LOONGSON2F 0x40000000
#define INSN_VR54XX 0x80000000
+#define INSN_R3900 0x100000000ULL
+#define INSN_R5900 0x200000000ULL
/* MIPS CPU defines. */
#define CPU_MIPS1 (ISA_MIPS1)
--
2.19.0.rc2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size
2018-09-09 1:34 ` [Qemu-devel] [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size Philippe Mathieu-Daudé
@ 2018-09-11 9:33 ` Aleksandar Markovic
2018-09-11 11:52 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 7+ messages in thread
From: Aleksandar Markovic @ 2018-09-11 9:33 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, Fredrik Noring, Richard Henderson
Cc: qemu-devel, Aurelien Jarno
> From: Philippe Mathieu-Daudé <philippe.mathieu.daude@gmail.com> on behalf of Philippe Mathieu-Daudé <f4bug@amsat.org>
> Sent: Sunday, September 9, 2018 3:34 AM
>
> Subject: [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size
>
> Currently this holder is limited to at most 32 flags on
> a 32-bit architecture, which lets an unique bit available
> for another 'chip specific instructions' flag.
>
> Relax this limit using a 64-bit integer.
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> target/mips/cpu.h | 2 +-
> target/mips/internal.h | 2 +-
> target/mips/translate.c | 4 ++--
> 3 files changed, 4 insertions(+), 4 deletions(-)
"int insn_flags;" in DisasContext definition in target/mips/translate.c needs to be updated as well.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores
2018-09-09 1:34 ` [Qemu-devel] [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores Philippe Mathieu-Daudé
@ 2018-09-11 10:18 ` Aleksandar Markovic
2018-09-11 11:57 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 7+ messages in thread
From: Aleksandar Markovic @ 2018-09-11 10:18 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, Fredrik Noring
Cc: qemu-devel, Richard Henderson, Aurelien Jarno
> From: Philippe Mathieu-Daudé <philippe.mathieu.daude@gmail.com> on behalf of Philippe > Mathieu-Daudé <f4bug@amsat.org>
> Sent: Sunday, September 9, 2018 3:34 AM
> To: Fredrik Noring; Aleksandar Markovic
> Cc: Philippe Mathieu-Daudé; qemu-devel@nongnu.org; Richard Henderson; Aurelien Jarno
> Subject: [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> target/mips/mips-defs.h | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/target/mips/mips-defs.h b/target/mips/mips-defs.h
> index c8e99791ad..9875bdac82 100644
> --- a/target/mips/mips-defs.h
> +++ b/target/mips/mips-defs.h
> @@ -56,6 +56,8 @@
> #define INSN_LOONGSON2E 0x20000000
> #define INSN_LOONGSON2F 0x40000000
> #define INSN_VR54XX 0x80000000
> +#define INSN_R3900 0x100000000ULL
> +#define INSN_R5900 0x200000000ULL
>
> /* MIPS CPU defines. */
> #define CPU_MIPS1 (ISA_MIPS1)
I don't think we should add flags for not yet supported CPUs ot ASEs. (Corresponding ELF flags in other headers are OK, since they originate from external headers - however, "insn_flags" is a purely internal QEMU construct.)
Instead, I would reorganize existing flags (as you, as well, indicated in a previous message).
Let's say, something like this:
/*
* insn_flags
*/
/*
* bits 0-31 MIPS base instruction sets
*/
#define ISA_MIPS1 0x0000000000000001
#define ISA_MIPS2 0x0000000000000002
#define ISA_MIPS3 0x0000000000000004
#define ISA_MIPS4 0x0000000000000008
#define ISA_MIPS5 0x0000000000000010
#define ISA_MIPS32 0x0000000000000020
#define ISA_MIPS32R2 0x0000000000000040
#define ISA_MIPS64 0x0000000000000080
#define ISA_MIPS64R2 0x0000000000000100
#define ISA_MIPS32R3 0x0000000000000200
#define ISA_MIPS64R3 0x0000000000000400
#define ISA_MIPS32R5 0x0000000000000800
#define ISA_MIPS64R5 0x0000000000001000
#define ISA_MIPS32R6 0x0000000000002000
#define ISA_MIPS64R6 0x0000000000004000
#define ISA_NANOMIPS32 0x0000000000008000
/*
* bits 32-47 MIPS ASEs
*/
#define ASE_MIPS16 0x0000000100000000
#define ASE_MIPS3D 0x0000000200000000
#define ASE_MDMX 0x0000000400000000
#define ASE_DSP 0x0000000800000000
#define ASE_DSPR2 0x0000001000000000
#define ASE_DSPR3 0x0000002000000000
#define ASE_MT 0x0000004000000000
#define ASE_SMARTMIPS 0x0000008000000000
#define ASE_MICROMIPS 0x0000010000000000
#define ASE_MSA 0x0000020000000000
/*
* bits 48-55 vendor-specific base instruction sets
*/
#define INSN_LOONGSON2E 0x0001000000000000
#define INSN_LOONGSON2F 0x0002000000000000
#define INSN_VR54XX 0x0004000000000000
/*
* bits 56-63 vendor-specific ASEs
*/
Notice that I inserted ASE_DSPR3, that was missing (there is an instruction from DSP R3 already implemented, and needing this flag for correct availability control.).
INSN_R5900 would belong to the third category. ASE_MXU and ASE MXU2 (not yet implemented in QEMU) from Igenic would be examples for the fourth category. The fourth category would be empty for now.
Thanks,
Aleksandar
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size
2018-09-11 9:33 ` Aleksandar Markovic
@ 2018-09-11 11:52 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-09-11 11:52 UTC (permalink / raw)
To: Aleksandar Markovic
Cc: Fredrik Noring, Richard Henderson, qemu-devel, Aurelien Jarno
On 9/11/18 6:33 AM, Aleksandar Markovic wrote:
>> From: Philippe Mathieu-Daudé <philippe.mathieu.daude@gmail.com> on behalf of Philippe Mathieu-Daudé <f4bug@amsat.org>
>> Sent: Sunday, September 9, 2018 3:34 AM
>>
>> Subject: [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size
>>
>> Currently this holder is limited to at most 32 flags on
>> a 32-bit architecture, which lets an unique bit available
>> for another 'chip specific instructions' flag.
>>
>> Relax this limit using a 64-bit integer.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> target/mips/cpu.h | 2 +-
>> target/mips/internal.h | 2 +-
>> target/mips/translate.c | 4 ++--
>> 3 files changed, 4 insertions(+), 4 deletions(-)
>
> "int insn_flags;" in DisasContext definition in target/mips/translate.c needs to be updated as well.
Oops I missed this one, good catch :)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores
2018-09-11 10:18 ` Aleksandar Markovic
@ 2018-09-11 11:57 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-09-11 11:57 UTC (permalink / raw)
To: Aleksandar Markovic, Fredrik Noring
Cc: qemu-devel, Aurelien Jarno, Richard Henderson
Hi Aleksandar,
On 9/11/18 7:18 AM, Aleksandar Markovic wrote:
>> From: Philippe Mathieu-Daudé <philippe.mathieu.daude@gmail.com> on behalf of Philippe > Mathieu-Daudé <f4bug@amsat.org>
>> Sent: Sunday, September 9, 2018 3:34 AM
>> To: Fredrik Noring; Aleksandar Markovic
>> Cc: Philippe Mathieu-Daudé; qemu-devel@nongnu.org; Richard Henderson; Aurelien Jarno
>> Subject: [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores
>>
>> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
>> ---
>> target/mips/mips-defs.h | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/target/mips/mips-defs.h b/target/mips/mips-defs.h
>> index c8e99791ad..9875bdac82 100644
>> --- a/target/mips/mips-defs.h
>> +++ b/target/mips/mips-defs.h
>> @@ -56,6 +56,8 @@
>> #define INSN_LOONGSON2E 0x20000000
>> #define INSN_LOONGSON2F 0x40000000
>> #define INSN_VR54XX 0x80000000
>> +#define INSN_R3900 0x100000000ULL
>> +#define INSN_R5900 0x200000000ULL
>>
>> /* MIPS CPU defines. */
>> #define CPU_MIPS1 (ISA_MIPS1)
>
> I don't think we should add flags for not yet supported CPUs ot ASEs. (Corresponding ELF flags in other headers are OK, since they originate from external headers - however, "insn_flags" is a purely internal QEMU construct.)
OK. I added those definitions to avoid Fredrik's series clashing with my
work, but I'll adapt later.
> Instead, I would reorganize existing flags (as you, as well, indicated in a previous message).
Good.
> Let's say, something like this:
>
>
> /*
> * insn_flags
> */
>
> /*
> * bits 0-31 MIPS base instruction sets
> */
> #define ISA_MIPS1 0x0000000000000001
> #define ISA_MIPS2 0x0000000000000002
> #define ISA_MIPS3 0x0000000000000004
> #define ISA_MIPS4 0x0000000000000008
> #define ISA_MIPS5 0x0000000000000010
> #define ISA_MIPS32 0x0000000000000020
> #define ISA_MIPS32R2 0x0000000000000040
> #define ISA_MIPS64 0x0000000000000080
> #define ISA_MIPS64R2 0x0000000000000100
> #define ISA_MIPS32R3 0x0000000000000200
> #define ISA_MIPS64R3 0x0000000000000400
> #define ISA_MIPS32R5 0x0000000000000800
> #define ISA_MIPS64R5 0x0000000000001000
> #define ISA_MIPS32R6 0x0000000000002000
> #define ISA_MIPS64R6 0x0000000000004000
> #define ISA_NANOMIPS32 0x0000000000008000
>
> /*
> * bits 32-47 MIPS ASEs
> */
> #define ASE_MIPS16 0x0000000100000000
> #define ASE_MIPS3D 0x0000000200000000
> #define ASE_MDMX 0x0000000400000000
> #define ASE_DSP 0x0000000800000000
> #define ASE_DSPR2 0x0000001000000000
> #define ASE_DSPR3 0x0000002000000000
> #define ASE_MT 0x0000004000000000
> #define ASE_SMARTMIPS 0x0000008000000000
> #define ASE_MICROMIPS 0x0000010000000000
> #define ASE_MSA 0x0000020000000000
>
> /*
> * bits 48-55 vendor-specific base instruction sets
> */
> #define INSN_LOONGSON2E 0x0001000000000000
> #define INSN_LOONGSON2F 0x0002000000000000
> #define INSN_VR54XX 0x0004000000000000
>
> /*
> * bits 56-63 vendor-specific ASEs
> */
Yes, this is cleaner, I like it. Beware we have to add the ULL suffix.
> Notice that I inserted ASE_DSPR3, that was missing (there is an instruction from DSP R3 already implemented, and needing this flag for correct availability control.).
OK.
> INSN_R5900 would belong to the third category. ASE_MXU and ASE MXU2 (not yet implemented in QEMU) from Igenic would be examples for the fourth category. The fourth category would be empty for now.
OK, thanks for the review!
Phil.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-09-11 11:57 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-09 1:34 [Qemu-devel] [PATCH 0/2] mips: Allow more 'Chip specific instructions' flags Philippe Mathieu-Daudé
2018-09-09 1:34 ` [Qemu-devel] [PATCH 1/2] target/mips: Increase the 'supported instructions' flags holder size Philippe Mathieu-Daudé
2018-09-11 9:33 ` Aleksandar Markovic
2018-09-11 11:52 ` Philippe Mathieu-Daudé
2018-09-09 1:34 ` [Qemu-devel] [PATCH 2/2] target/mips: Add entries for the Toshiba's R3900 and R5900 cores Philippe Mathieu-Daudé
2018-09-11 10:18 ` Aleksandar Markovic
2018-09-11 11:57 ` Philippe Mathieu-Daudé
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.