|
From: | Richard Henderson |
Subject: | Re: access guest address from within instruction |
Date: | Sun, 2 Oct 2022 07:40:38 -0700 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 |
On 10/2/22 02:20, BitFriends wrote:
I now came up with this code: TCGv_i64 res = 0; TCGv_i64 addr = (TCGv_i64)(env->regs[R_EDI]); tcg_gen_qemu_ld_i64(res, addr, 0, MO_LEUQ); env->regs[R_EAX] = (target_ulong)res;However this crashes afterwards in test_bit. Maybe this is caused by an invalid access? Anything wrong about the code? This still gives some warnings, like TCGv_i32 expected (and when you use TCGv_i32, it says TCGv_i64 expected) plus some casting warnings.
It is as if you did not read the second paragraph of my response at all. tcg_gen_qemu_ld_i64 is for generating code, not performing a direct action. Can you see how your code differs from *all* of the code around it? r~
Am Sa., 1. Okt. 2022 um 22:23 Uhr schrieb Richard Henderson <richard.henderson@linaro.org <mailto:richard.henderson@linaro.org>>:On 10/1/22 13:10, BitFriends wrote: > Hello, > > I am trying to create a custom instruction that accesses guest memory specified by an > address in a register. I specifically want to read from that address. So I tried to do > that using "tcg_gen_qemu_ld_i64(&res, env->regs[R_EDI], 0, MO_LEUQ);", but that doesn't > save any result in res. This statement should have given you compilation errors, so I don't know what you mean by "doesn't save any result". There's clearly a disconnect between what you describe and what you actually attempted. Anyway, by the name you can see that function "gen"erates a "tcg" operation, which is then later compiled by the jit, the output of which is later executed to produce a result. Which is, in general, what you want for implementing a custom instruction. r~
[Prev in Thread] | Current Thread | [Next in Thread] |