Handle endianness of double floats, by Magnus Damm.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3020 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									0ae045ae43
								
							
						
					
					
						commit
						e04ea3dc1a
					
				@ -80,7 +80,7 @@ typedef struct tlb_t {
 | 
				
			|||||||
typedef struct CPUSH4State {
 | 
					typedef struct CPUSH4State {
 | 
				
			||||||
    uint32_t flags;		/* general execution flags */
 | 
					    uint32_t flags;		/* general execution flags */
 | 
				
			||||||
    uint32_t gregs[24];		/* general registers */
 | 
					    uint32_t gregs[24];		/* general registers */
 | 
				
			||||||
    uint32_t fregs[32];		/* floating point registers */
 | 
					    float32 fregs[32];		/* floating point registers */
 | 
				
			||||||
    uint32_t sr;		/* status register */
 | 
					    uint32_t sr;		/* status register */
 | 
				
			||||||
    uint32_t ssr;		/* saved status register */
 | 
					    uint32_t ssr;		/* saved status register */
 | 
				
			||||||
    uint32_t spc;		/* saved program counter */
 | 
					    uint32_t spc;		/* saved program counter */
 | 
				
			||||||
 | 
				
			|||||||
@ -698,37 +698,49 @@ void OPPROTO op_movl_imm_rN(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void OPPROTO op_fmov_frN_FT0(void)
 | 
					void OPPROTO op_fmov_frN_FT0(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    FT0 = *(float32 *)&env->fregs[PARAM1];
 | 
					    FT0 = env->fregs[PARAM1];
 | 
				
			||||||
    RETURN();
 | 
					    RETURN();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void OPPROTO op_fmov_drN_DT0(void)
 | 
					void OPPROTO op_fmov_drN_DT0(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DT0 = *(float64 *)&env->fregs[PARAM1];
 | 
					    CPU_DoubleU d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    d.l.upper = *(uint32_t *)&env->fregs[PARAM1];
 | 
				
			||||||
 | 
					    d.l.lower = *(uint32_t *)&env->fregs[PARAM1 + 1];
 | 
				
			||||||
 | 
					    DT0 = d.d;
 | 
				
			||||||
    RETURN();
 | 
					    RETURN();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void OPPROTO op_fmov_frN_FT1(void)
 | 
					void OPPROTO op_fmov_frN_FT1(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    FT1 = *(float32 *)&env->fregs[PARAM1];
 | 
					    FT1 = env->fregs[PARAM1];
 | 
				
			||||||
    RETURN();
 | 
					    RETURN();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void OPPROTO op_fmov_drN_DT1(void)
 | 
					void OPPROTO op_fmov_drN_DT1(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    DT1 = *(float64 *)&env->fregs[PARAM1];
 | 
					    CPU_DoubleU d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    d.l.upper = *(uint32_t *)&env->fregs[PARAM1];
 | 
				
			||||||
 | 
					    d.l.lower = *(uint32_t *)&env->fregs[PARAM1 + 1];
 | 
				
			||||||
 | 
					    DT1 = d.d;
 | 
				
			||||||
    RETURN();
 | 
					    RETURN();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void OPPROTO op_fmov_FT0_frN(void)
 | 
					void OPPROTO op_fmov_FT0_frN(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    *(float32 *)&env->fregs[PARAM1] = FT0;
 | 
					    env->fregs[PARAM1] = FT0;
 | 
				
			||||||
    RETURN();
 | 
					    RETURN();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void OPPROTO op_fmov_DT0_drN(void)
 | 
					void OPPROTO op_fmov_DT0_drN(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    *(float64 *)&env->fregs[PARAM1] = DT0;
 | 
					    CPU_DoubleU d;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    d.d = DT0;
 | 
				
			||||||
 | 
					    *(uint32_t *)&env->fregs[PARAM1] = d.l.upper;
 | 
				
			||||||
 | 
					    *(uint32_t *)&env->fregs[PARAM1 + 1] = d.l.lower;
 | 
				
			||||||
    RETURN();
 | 
					    RETURN();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user