On 2020/2/22 下午3:37, Paolo Bonzini wrote: > On 22/02/20 03:10, Chen Gang wrote: >> Set C1 to 1 if stack overflow occurred; set to 0 otherwise". >> >> In helper_fxam_ST0, I guess, we need "env->fpus |= 0x200" (but I don't >> know wheter it will be conflict with SIGND(temp)). And we have to still >> need foverflow, because all env->fptags being 0 doesn't mean overflow. > > No, you need to add "env->fpus |= 0x200" and "env->fpus &= ~0x200" > directly to fpush, fpop, etc. >
OK. The content below is my next TODO, welcome your opinions. When overflow occurs, for me, we need keep everything no touch except set C1 flag. In fxam, we don't clear C1, but keep no touch for clearning C1 in another places. When underflow occurs, for me, we need keep everything no touch except set env->fpstt 8, so the next consecutive fpop/f[i]stp* can be checked easier, and the next fpush/f[i]ld* can work well in normal. For fxam, we check env->fpstt == 8 and env->fptags for empty. And when env->fpstt is 8, it need be set 7 before used in fincstp and ffree_STN. Thanks.