device: 0.841 ppc: 0.814 register: 0.813 socket: 0.672 permissions: 0.667 graphic: 0.665 vnc: 0.650 hypervisor: 0.644 kernel: 0.641 performance: 0.638 architecture: 0.630 network: 0.620 semantic: 0.613 assembly: 0.550 boot: 0.545 risc-v: 0.518 peripherals: 0.494 mistranslation: 0.480 PID: 0.474 files: 0.448 arm: 0.443 debug: 0.369 user-level: 0.317 VMM: 0.300 x86: 0.274 i386: 0.240 TCG: 0.232 KVM: 0.048 virtual: 0.026 SH4: ADDV instruction not emulated properly Description of problem: ADDV opcode is emulated incorrectly. The documentation says: `ADDV Rm, Rn Rn + Rm -> Rn, overflow -> T` What Qemu actually emulates: `ADDV Rm, Rn Rn + Rm -> Rm, overflow -> T` Steps to reproduce: ```c #include int main(void) { register unsigned int a asm("r8") = 0x7fffffff; register unsigned int b asm("r9") = 1; register unsigned int c asm("r10"); asm volatile("clrt\n" "addv %2,%0\n" "movt %1\n" : "+r"(a), "=r"(c) : "r"(b) :); printf("Values: a=0x%x b=0x%x c=0x%x\n", a, b, c); return 0; } ``` Additional information: Tested on real hardware (SEGA Dreamcast, GCC 15.0), the program above prints: `Values: a=0x80000000 b=0x1 c=0x1` Running with Qemu (and GCC 13.0), the same program prints: `Values: a=0x7fffffff b=0x80000000 c=0x1`