register: 0.688 device: 0.679 ppc: 0.612 graphic: 0.495 architecture: 0.486 assembly: 0.485 vnc: 0.479 semantic: 0.460 permissions: 0.424 performance: 0.363 risc-v: 0.314 boot: 0.291 kernel: 0.286 socket: 0.281 peripherals: 0.256 network: 0.239 hypervisor: 0.234 PID: 0.217 debug: 0.212 files: 0.176 VMM: 0.143 arm: 0.115 mistranslation: 0.100 x86: 0.098 i386: 0.085 user-level: 0.065 TCG: 0.052 KVM: 0.006 virtual: 0.006 SH4: SUBV instruction not emulated properly Description of problem: SUBV opcode is emulated incorrectly. The documentation says: `SUBV Rm, Rn Rn - Rm -> Rn, underflow -> T` Qemu seems to perform the subtraction correctly, but will not detect an underflow. Steps to reproduce: ```c #include int main(void) { register unsigned int a asm("r8") = 0x80000001; register unsigned int b asm("r9") = 0x2; register unsigned int c asm("r10"); asm volatile("subv %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=0x7fffffff b=0x2 c=0x1` Running with Qemu (and GCC 13.0), the same program prints: `Values: a=0x7fffffff b=0x2 c=0x0`