* [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug @ 2018-03-16 17:26 Michael Clark 2018-03-18 23:22 ` Philippe Mathieu-Daudé 0 siblings, 1 reply; 13+ messages in thread From: Michael Clark @ 2018-03-16 17:26 UTC (permalink / raw) To: qemu-devel Cc: Michael Clark, Palmer Dabbelt, Peter Maydell, Philippe Mathieu-Daudé This version uses a constant size memory buffer sized for the maximum possible ISA string length. It also uses g_new instead of g_new0, uses more efficient logic to append extensions and adds manual zero termination of the string. Cc: Palmer Dabbelt <palmer@sifive.com> Cc: Peter Maydell <peter.maydell@linaro.org> Cc: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Michael Clark <mjc@sifive.com> --- target/riscv/cpu.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 4851890..298abbd 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -391,16 +391,16 @@ static const TypeInfo riscv_cpu_type_info = { char *riscv_isa_string(RISCVCPU *cpu) { int i; - size_t maxlen = 5 + ctz32(cpu->env.misa); - char *isa_string = g_new0(char, maxlen); - snprintf(isa_string, maxlen, "rv%d", TARGET_LONG_BITS); + const size_t maxlen = sizeof("rv128") + sizeof(riscv_exts) + 1; + char *isa_str = g_new(char, maxlen); + char *p = isa_str + snprintf(isa_str, maxlen, "rv%d", TARGET_LONG_BITS); for (i = 0; i < sizeof(riscv_exts); i++) { if (cpu->env.misa & RV(riscv_exts[i])) { - isa_string[strlen(isa_string)] = riscv_exts[i] - 'A' + 'a'; - + *p++ = riscv_exts[i] - 'A' + 'a'; } } - return isa_string; + *p = '\0'; + return isa_str; } void riscv_cpu_list(FILE *f, fprintf_function cpu_fprintf) -- 2.7.0 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-16 17:26 [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug Michael Clark @ 2018-03-18 23:22 ` Philippe Mathieu-Daudé 2018-03-19 18:35 ` Michael Clark 0 siblings, 1 reply; 13+ messages in thread From: Philippe Mathieu-Daudé @ 2018-03-18 23:22 UTC (permalink / raw) To: Michael Clark, qemu-devel; +Cc: Palmer Dabbelt, Peter Maydell On 03/16/2018 06:26 PM, Michael Clark wrote: > This version uses a constant size memory buffer sized for > the maximum possible ISA string length. It also uses g_new > instead of g_new0, uses more efficient logic to append > extensions and adds manual zero termination of the string. > > Cc: Palmer Dabbelt <palmer@sifive.com> > Cc: Peter Maydell <peter.maydell@linaro.org> > Cc: Philippe Mathieu-Daudé <f4bug@amsat.org> > Signed-off-by: Michael Clark <mjc@sifive.com> > --- > target/riscv/cpu.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > index 4851890..298abbd 100644 > --- a/target/riscv/cpu.c > +++ b/target/riscv/cpu.c > @@ -391,16 +391,16 @@ static const TypeInfo riscv_cpu_type_info = { > char *riscv_isa_string(RISCVCPU *cpu) > { > int i; > - size_t maxlen = 5 + ctz32(cpu->env.misa); > - char *isa_string = g_new0(char, maxlen); > - snprintf(isa_string, maxlen, "rv%d", TARGET_LONG_BITS); > + const size_t maxlen = sizeof("rv128") + sizeof(riscv_exts) + 1; > + char *isa_str = g_new(char, maxlen); > + char *p = isa_str + snprintf(isa_str, maxlen, "rv%d", TARGET_LONG_BITS); > for (i = 0; i < sizeof(riscv_exts); i++) { > if (cpu->env.misa & RV(riscv_exts[i])) { > - isa_string[strlen(isa_string)] = riscv_exts[i] - 'A' + 'a'; > - > + *p++ = riscv_exts[i] - 'A' + 'a'; /* tolower() */ I prefer unobfuscated code (think newcomers and reviewers) :| Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > } > } > - return isa_string; > + *p = '\0'; > + return isa_str; > } > > void riscv_cpu_list(FILE *f, fprintf_function cpu_fprintf) > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-18 23:22 ` Philippe Mathieu-Daudé @ 2018-03-19 18:35 ` Michael Clark 2018-03-19 19:42 ` Richard W.M. Jones 2018-03-20 4:43 ` Richard Henderson 0 siblings, 2 replies; 13+ messages in thread From: Michael Clark @ 2018-03-19 18:35 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: QEMU Developers, Palmer Dabbelt, Peter Maydell, Richard W.M. Jones On Sun, Mar 18, 2018 at 4:22 PM, Philippe Mathieu-Daudé <f4bug@amsat.org> wrote: > On 03/16/2018 06:26 PM, Michael Clark wrote: > > This version uses a constant size memory buffer sized for > > the maximum possible ISA string length. It also uses g_new > > instead of g_new0, uses more efficient logic to append > > extensions and adds manual zero termination of the string. > > > > Cc: Palmer Dabbelt <palmer@sifive.com> > > Cc: Peter Maydell <peter.maydell@linaro.org> > > Cc: Philippe Mathieu-Daudé <f4bug@amsat.org> > > Signed-off-by: Michael Clark <mjc@sifive.com> > > --- > > target/riscv/cpu.c | 12 ++++++------ > > 1 file changed, 6 insertions(+), 6 deletions(-) > > > > diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c > > index 4851890..298abbd 100644 > > --- a/target/riscv/cpu.c > > +++ b/target/riscv/cpu.c > > @@ -391,16 +391,16 @@ static const TypeInfo riscv_cpu_type_info = { > > char *riscv_isa_string(RISCVCPU *cpu) > > { > > int i; > > - size_t maxlen = 5 + ctz32(cpu->env.misa); > > - char *isa_string = g_new0(char, maxlen); > > - snprintf(isa_string, maxlen, "rv%d", TARGET_LONG_BITS); > > + const size_t maxlen = sizeof("rv128") + sizeof(riscv_exts) + 1; > > + char *isa_str = g_new(char, maxlen); > > + char *p = isa_str + snprintf(isa_str, maxlen, "rv%d", > TARGET_LONG_BITS); > > for (i = 0; i < sizeof(riscv_exts); i++) { > > if (cpu->env.misa & RV(riscv_exts[i])) { > > - isa_string[strlen(isa_string)] = riscv_exts[i] - 'A' + 'a'; > > - > > + *p++ = riscv_exts[i] - 'A' + 'a'; > /* tolower() */ > > I prefer unobfuscated code (think newcomers and reviewers) :| > Thanks! Done. I think i'll add the riscv_isa_string fix onto the RISC-V post-merge spec conformance and cleanup series, and send I'll send out a (hopefully final) version of it today, so we can merge all of the spec conformance, bug fixes and cleanups in one PR. The RISC-V post-merge spec conformance and cleanup series has had a lot of testing. I've been using it to compile QEMU inside of QEMU using the RISC-V Fedora Image and its native RISC-V GCC toolchain running inside SMP Linux 4.16-rc2. It appears to be pretty rock-solid. The rcu lock fix would likely only affect users who are ballooning memory while a guest is under load. The page walker changes have also been tested under load (including performance tests). FYI - I also have an experimental branch containing a RISC-V TCG back-end that I started on during the RISC-V Hackathon in Portland last week: - https://github.com/michaeljclark/riscv-qemu/tree/wip-riscv-tcg-backend I'm able to run a very simple x86_64 hello world program on RISC-V, avoiding all of the usual libc startup. However, it may be some time before I submit a patch series for this branch. So far the RISC-V TCG backend doesn't implement softmmu, have bigendian byteswapping in its load/store implementation or 64-bit on 32-bit support (brcond2/setcond2). This will come, however, at present I'm still testing the basic codegen. That being said, it has meant that i've been using the RISC-V QEMU Fedora image pretty extensively as my main development machine, with the RISC-V post-merge spec conformance and cleanup series applied, performing a lot of parallel makes on a quad-core i7. The only thing I am really missing is gdb. The current RISC-V GDB port seems to be missing user-space debugging support as I believe the focus has been on the JTAG remote debugging use case. [mclark@stage4 riscv-qemu]$ uname -a Linux stage4.fedoraproject.org 4.16.0-rc2-00328-gebea62367bc4 #4 SMP Mon Feb 26 16:05:16 GMT 2018 riscv64 riscv64 riscv64 GNU/Linux [mclark@stage4 riscv-qemu]$ ./riscv64-linux-user/qemu-riscv64 hello.riscv64 Hello World [mclark@stage4 riscv-qemu]$ ./x86_64-linux-user/qemu-x86_64 hello.x86_64 Hello World Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > > > } > > } > > - return isa_string; > > + *p = '\0'; > > + return isa_str; > > } > > > > void riscv_cpu_list(FILE *f, fprintf_function cpu_fprintf) > > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-19 18:35 ` Michael Clark @ 2018-03-19 19:42 ` Richard W.M. Jones 2018-03-19 21:39 ` Michael Clark 2018-03-20 4:43 ` Richard Henderson 1 sibling, 1 reply; 13+ messages in thread From: Richard W.M. Jones @ 2018-03-19 19:42 UTC (permalink / raw) To: Michael Clark Cc: Philippe Mathieu-Daudé, QEMU Developers, Palmer Dabbelt, Peter Maydell On Mon, Mar 19, 2018 at 11:35:51AM -0700, Michael Clark wrote: > The RISC-V post-merge spec conformance and cleanup series has had a lot of > testing. I've been using it to compile QEMU inside of QEMU using the RISC-V > Fedora Image and its native RISC-V GCC toolchain running inside SMP Linux > 4.16-rc2. It appears to be pretty rock-solid. The rcu lock fix would likely > only affect users who are ballooning memory while a guest is under load. > The page walker changes have also been tested under load (including > performance tests). Did you see the problem with restoring floating point registers on context switch? The test case is quite simple: http://oirase.annexia.org/tmp/sched.c Note you must compile it with gcc -O2 to manifest the bug. (We originally thought it was a problem with gcc's optimization, but it isn't.) In Fedora's qemu tree are carrying the following patch which is just a workaround: https://github.com/rwmjones/fedora-riscv-bootstrap/blob/master/stage1-riscv-qemu/force-float-save.patch Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-19 19:42 ` Richard W.M. Jones @ 2018-03-19 21:39 ` Michael Clark 2018-03-22 21:06 ` Michael Clark 0 siblings, 1 reply; 13+ messages in thread From: Michael Clark @ 2018-03-19 21:39 UTC (permalink / raw) To: Richard W.M. Jones Cc: Philippe Mathieu-Daudé, QEMU Developers, Palmer Dabbelt, Peter Maydell On Mon, Mar 19, 2018 at 12:42 PM, Richard W.M. Jones <rjones@redhat.com> wrote: > On Mon, Mar 19, 2018 at 11:35:51AM -0700, Michael Clark wrote: > > The RISC-V post-merge spec conformance and cleanup series has had a lot > of > > testing. I've been using it to compile QEMU inside of QEMU using the > RISC-V > > Fedora Image and its native RISC-V GCC toolchain running inside SMP Linux > > 4.16-rc2. It appears to be pretty rock-solid. The rcu lock fix would > likely > > only affect users who are ballooning memory while a guest is under load. > > The page walker changes have also been tested under load (including > > performance tests). > > Did you see the problem with restoring floating point registers on > context switch? The test case is quite simple: > > http://oirase.annexia.org/tmp/sched.c No I didn't. Thanks. > Note you must compile it with gcc -O2 to manifest the bug. (We > originally thought it was a problem with gcc's optimization, but it > isn't.) > Okay. I must admit most of my testing has been integer heavy workloads. > In Fedora's qemu tree are carrying the following patch which is just a > workaround: > > https://github.com/rwmjones/fedora-riscv-bootstrap/blob/ > master/stage1-riscv-qemu/force-float-save.patch I will take a look... There were some changes around v4 of our port upstream patch series to add MSTATUS.FS (TB_FLAGS_FP_ENABLE) to to tb->flags to avoid checking the flags on all FP ops. static inline void cpu_get_tb_cpu_state(CPURISCVState *env, target_ulong *pc, target_ulong *cs_base, uint32_t *flags) { *pc = env->pc; *cs_base = 0; #ifdef CONFIG_USER_ONLY *flags = TB_FLAGS_FP_ENABLE; #else *flags = cpu_mmu_index(env, 0) | (env->mstatus & MSTATUS_FS); #endif } I'll have to get my head around the implication of this or with the privilege level and how MSTATUS.FS is currently set... ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-19 21:39 ` Michael Clark @ 2018-03-22 21:06 ` Michael Clark 2018-03-22 22:09 ` Richard W.M. Jones 0 siblings, 1 reply; 13+ messages in thread From: Michael Clark @ 2018-03-22 21:06 UTC (permalink / raw) To: Richard W.M. Jones Cc: Philippe Mathieu-Daudé, QEMU Developers, Palmer Dabbelt, Peter Maydell On Mon, Mar 19, 2018 at 2:39 PM, Michael Clark <mjc@sifive.com> wrote: > > > On Mon, Mar 19, 2018 at 12:42 PM, Richard W.M. Jones <rjones@redhat.com> > wrote: > >> On Mon, Mar 19, 2018 at 11:35:51AM -0700, Michael Clark wrote: >> > The RISC-V post-merge spec conformance and cleanup series has had a lot >> of >> > testing. I've been using it to compile QEMU inside of QEMU using the >> RISC-V >> > Fedora Image and its native RISC-V GCC toolchain running inside SMP >> Linux >> > 4.16-rc2. It appears to be pretty rock-solid. The rcu lock fix would >> likely >> > only affect users who are ballooning memory while a guest is under load. >> > The page walker changes have also been tested under load (including >> > performance tests). >> >> Did you see the problem with restoring floating point registers on >> context switch? The test case is quite simple: >> >> http://oirase.annexia.org/tmp/sched.c > > > No I didn't. Thanks. > > >> Note you must compile it with gcc -O2 to manifest the bug. (We >> originally thought it was a problem with gcc's optimization, but it >> isn't.) >> > > Okay. I must admit most of my testing has been integer heavy workloads. > > >> In Fedora's qemu tree are carrying the following patch which is just a >> workaround: >> >> https://github.com/rwmjones/fedora-riscv-bootstrap/blob/mast >> er/stage1-riscv-qemu/force-float-save.patch > > > I will take a look... > >From my local testing, it appears to only show up with SMP enabled. With 1 CPU enabled the sched.c test passes. > There were some changes around v4 of our port upstream patch series to add > MSTATUS.FS (TB_FLAGS_FP_ENABLE) to to tb->flags to avoid checking the flags > on all FP ops. > I'm curious about the change in v4 of our upstream patch series "Enforce MSTATUS_FS via TB flags" - https://github.com/riscv/riscv-qemu/commit/1b0631573008d19b2cb4bb1ef388bd51d6a1d722 I'll could try and revert this and see if it makes any difference... however I think the float code has changed substantially with respect to handling of flags. We could backport the more conservative approach of handling MSTATUS_FS in the float routines. We should also run the test case on hardware to rule out linux-kernel MSTATIS_FS bugs... BTW We didn't have MTTCG enabled until v6 of our patch series so given it only shows up on SMP, it wouldn't have been visible until v6 or after. static inline void cpu_get_tb_cpu_state(CPURISCVState *env, target_ulong > *pc, > target_ulong *cs_base, uint32_t > *flags) > { > *pc = env->pc; > *cs_base = 0; > #ifdef CONFIG_USER_ONLY > *flags = TB_FLAGS_FP_ENABLE; > #else > *flags = cpu_mmu_index(env, 0) | (env->mstatus & MSTATUS_FS); > #endif > } > > I'll have to get my head around the implication of this or with the > privilege level and how MSTATUS.FS is currently set... > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-22 21:06 ` Michael Clark @ 2018-03-22 22:09 ` Richard W.M. Jones 2018-03-22 22:17 ` DJ Delorie 0 siblings, 1 reply; 13+ messages in thread From: Richard W.M. Jones @ 2018-03-22 22:09 UTC (permalink / raw) To: Michael Clark, dj Cc: Philippe Mathieu-Daudé, QEMU Developers, Palmer Dabbelt, Peter Maydell On Thu, Mar 22, 2018 at 02:06:24PM -0700, Michael Clark wrote: > On Mon, Mar 19, 2018 at 2:39 PM, Michael Clark <mjc@sifive.com> wrote: > > On Mon, Mar 19, 2018 at 12:42 PM, Richard W.M. Jones <rjones@redhat.com> > > wrote: > >> Did you see the problem with restoring floating point registers on > >> context switch? The test case is quite simple: > >> > >> http://oirase.annexia.org/tmp/sched.c > > > > No I didn't. Thanks. > From my local testing, it appears to only show up with SMP enabled. With 1 > CPU enabled the sched.c test passes. > I'll could try and revert this and see if it makes any difference... > however I think the float code has changed substantially with respect to > handling of flags. We could backport the more conservative approach of > handling MSTATUS_FS in the float routines. We should also run the test case > on hardware to rule out linux-kernel MSTATUS_FS bugs... DJ, am I remembering correctly that you tried the test case on the HiFive evaluation board and it didn't demonstrate the bug? Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-22 22:09 ` Richard W.M. Jones @ 2018-03-22 22:17 ` DJ Delorie 2018-03-22 22:21 ` Michael Clark 2018-03-23 20:01 ` Palmer Dabbelt 0 siblings, 2 replies; 13+ messages in thread From: DJ Delorie @ 2018-03-22 22:17 UTC (permalink / raw) To: Richard W.M. Jones; +Cc: mjc, f4bug, qemu-devel, palmer, peter.maydell "Richard W.M. Jones" <rjones@redhat.com> writes: > DJ, am I remembering correctly that you tried the test case on the > HiFive evaluation board and it didn't demonstrate the bug? I tested it on the vc707 board, without seeing the bug. I can test other test cases if needed, I've got the board running Fedora at the moment. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-22 22:17 ` DJ Delorie @ 2018-03-22 22:21 ` Michael Clark 2018-03-23 20:01 ` Palmer Dabbelt 1 sibling, 0 replies; 13+ messages in thread From: Michael Clark @ 2018-03-22 22:21 UTC (permalink / raw) To: DJ Delorie Cc: Richard W.M. Jones, Philippe Mathieu-Daudé, QEMU Developers, Palmer Dabbelt, Peter Maydell On Thu, Mar 22, 2018 at 3:17 PM, DJ Delorie <dj@redhat.com> wrote: > "Richard W.M. Jones" <rjones@redhat.com> writes: > > DJ, am I remembering correctly that you tried the test case on the > > HiFive evaluation board and it didn't demonstrate the bug? > > I tested it on the vc707 board, without seeing the bug. > > I can test other test cases if needed, I've got the board running Fedora > at the moment. > Okay, I'll assume its a QEMU RISC-V bug. ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-22 22:17 ` DJ Delorie 2018-03-22 22:21 ` Michael Clark @ 2018-03-23 20:01 ` Palmer Dabbelt 1 sibling, 0 replies; 13+ messages in thread From: Palmer Dabbelt @ 2018-03-23 20:01 UTC (permalink / raw) To: dj; +Cc: rjones, Michael Clark, f4bug, qemu-devel, peter.maydell On Thu, 22 Mar 2018 15:17:16 PDT (-0700), dj@redhat.com wrote: > "Richard W.M. Jones" <rjones@redhat.com> writes: >> DJ, am I remembering correctly that you tried the test case on the >> HiFive evaluation board and it didn't demonstrate the bug? > > I tested it on the vc707 board, without seeing the bug. FWIW, the cores in the bitstream for the vc707 are almost identical to the FU540-C000. > I can test other test cases if needed, I've got the board running Fedora > at the moment. Thanks! ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-19 18:35 ` Michael Clark 2018-03-19 19:42 ` Richard W.M. Jones @ 2018-03-20 4:43 ` Richard Henderson 2018-03-20 18:06 ` Michael Clark 1 sibling, 1 reply; 13+ messages in thread From: Richard Henderson @ 2018-03-20 4:43 UTC (permalink / raw) To: Michael Clark, Philippe Mathieu-Daudé Cc: Peter Maydell, Palmer Dabbelt, QEMU Developers, Richard W.M. Jones On 03/20/2018 02:35 AM, Michael Clark wrote: > FYI - I also have an experimental branch containing a RISC-V TCG back-end > that I started on during the RISC-V Hackathon in Portland last week: > > - https://github.com/michaeljclark/riscv-qemu/tree/wip-riscv-tcg-backend Cool. > I'm able to run a very simple x86_64 hello world program on RISC-V, > avoiding all of the usual libc startup. However, it may be some time before > I submit a patch series for this branch. So far the RISC-V TCG backend > doesn't implement softmmu, have bigendian byteswapping in its load/store > implementation ... Before you work too hard on this last, ping me. I've been intending to change TCG such that hosts that do not support byte-swapping memory operations do not need to handle them specially. Instead, we'd expand a "normal" byte swap from a temporary after a load (and similarly before a store). I expect this to improve the state of affairs for i386 (without movbe), where we are currently extremely limited in the available registers. r~ ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-20 4:43 ` Richard Henderson @ 2018-03-20 18:06 ` Michael Clark 2018-03-24 4:35 ` Richard Henderson 0 siblings, 1 reply; 13+ messages in thread From: Michael Clark @ 2018-03-20 18:06 UTC (permalink / raw) To: Richard Henderson Cc: Philippe Mathieu-Daudé, Peter Maydell, Palmer Dabbelt, QEMU Developers, Richard W.M. Jones On Mon, Mar 19, 2018 at 9:43 PM, Richard Henderson < richard.henderson@linaro.org> wrote: > On 03/20/2018 02:35 AM, Michael Clark wrote: > > FYI - I also have an experimental branch containing a RISC-V TCG back-end > > that I started on during the RISC-V Hackathon in Portland last week: > > > > - https://github.com/michaeljclark/riscv-qemu/tree/wip-riscv-tcg-backend > > Cool. > > > I'm able to run a very simple x86_64 hello world program on RISC-V, > > avoiding all of the usual libc startup. However, it may be some time > before > > I submit a patch series for this branch. So far the RISC-V TCG backend > > doesn't implement softmmu, have bigendian byteswapping in its load/store > > implementation ... > > Before you work too hard on this last, ping me. I've been intending to > change > TCG such that hosts that do not support byte-swapping memory operations do > not > need to handle them specially. Instead, we'd expand a "normal" byte swap > from > a temporary after a load (and similarly before a store). > Okay. I'll leave the byte swapping out for now. The first priority is to test the basic codegen with little endian front-ends e.g. riscv -> riscv and x86 -> riscv, and the second priority is to implement softmmu. I still have some bugs as its pretty new code, but as I mentioned, the bones are there. i.e. we have relocs and instruction encoders for riscv. > I expect this to improve the state of affairs for i386 (without movbe), > where > we are currently extremely limited in the available registers. > Okay, so this would move byte swapping into TCG generic code instead of the TCG backend, unless the backend explicitly supports load/store with byte swap? ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug 2018-03-20 18:06 ` Michael Clark @ 2018-03-24 4:35 ` Richard Henderson 0 siblings, 0 replies; 13+ messages in thread From: Richard Henderson @ 2018-03-24 4:35 UTC (permalink / raw) To: Michael Clark Cc: Philippe Mathieu-Daudé, Peter Maydell, Palmer Dabbelt, QEMU Developers, Richard W.M. Jones On 03/21/2018 02:06 AM, Michael Clark wrote: > Okay, so this would move byte swapping into TCG generic code instead of the TCG > backend, unless the backend explicitly supports load/store with byte swap? Yes. r~ ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2018-03-24 4:35 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-03-16 17:26 [Qemu-devel] [PATCH v3] RISC-V: Fix riscv_isa_string memory size bug Michael Clark 2018-03-18 23:22 ` Philippe Mathieu-Daudé 2018-03-19 18:35 ` Michael Clark 2018-03-19 19:42 ` Richard W.M. Jones 2018-03-19 21:39 ` Michael Clark 2018-03-22 21:06 ` Michael Clark 2018-03-22 22:09 ` Richard W.M. Jones 2018-03-22 22:17 ` DJ Delorie 2018-03-22 22:21 ` Michael Clark 2018-03-23 20:01 ` Palmer Dabbelt 2018-03-20 4:43 ` Richard Henderson 2018-03-20 18:06 ` Michael Clark 2018-03-24 4:35 ` Richard Henderson
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.