cleanups and fixes for Immediate_IbIb of SSE4A
This commit is contained in:
parent
8b5eaa5820
commit
de5838ce80
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: access.cc,v 1.81 2007-12-13 21:30:04 sshwarts Exp $
|
||||
// $Id: access.cc,v 1.82 2007-12-16 20:47:09 sshwarts Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -1434,7 +1434,7 @@ accessOK:
|
||||
laddr = seg->cache.u.segment.base + offset;
|
||||
BX_INSTR_MEM_DATA(BX_CPU_ID, laddr, 2, BX_WRITE);
|
||||
#if BX_CPU_LEVEL >= 4 && BX_SUPPORT_ALIGNMENT_CHECK
|
||||
if (user && BX_CPU_THIS_PTR alignment_check) {
|
||||
if (BX_CPU_THIS_PTR alignment_check) {
|
||||
if (laddr & 1) {
|
||||
BX_ERROR(("write_new_stack_word(): #AC misaligned access"));
|
||||
exception(BX_AC_EXCEPTION, 0, 0);
|
||||
@ -1473,7 +1473,7 @@ accessOK:
|
||||
laddr = seg->cache.u.segment.base + offset;
|
||||
BX_INSTR_MEM_DATA(BX_CPU_ID, laddr, 4, BX_WRITE);
|
||||
#if BX_CPU_LEVEL >= 4 && BX_SUPPORT_ALIGNMENT_CHECK
|
||||
if (user && BX_CPU_THIS_PTR alignment_check) {
|
||||
if (BX_CPU_THIS_PTR alignment_check) {
|
||||
if (laddr & 3) {
|
||||
BX_ERROR(("write_new_stack_dword(): #AC misaligned access"));
|
||||
exception(BX_AC_EXCEPTION, 0, 0);
|
||||
@ -1509,7 +1509,7 @@ void BX_CPU_C::write_new_stack_qword(bx_address offset, bx_bool user, Bit64u dat
|
||||
if (IsCanonical(offset)) {
|
||||
BX_INSTR_MEM_DATA(BX_CPU_ID, laddr, 8, BX_WRITE);
|
||||
#if BX_CPU_LEVEL >= 4 && BX_SUPPORT_ALIGNMENT_CHECK
|
||||
if (user && BX_CPU_THIS_PTR alignment_check) {
|
||||
if (BX_CPU_THIS_PTR alignment_check) {
|
||||
if (laddr & 7) {
|
||||
BX_ERROR(("write_new_stack_qword(): #AC misaligned access"));
|
||||
exception(BX_AC_EXCEPTION, 0, 0);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: cpu.h,v 1.392 2007-12-15 17:42:20 sshwarts Exp $
|
||||
// $Id: cpu.h,v 1.393 2007-12-16 20:47:09 sshwarts Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -3780,20 +3780,19 @@ IMPLEMENT_EFLAG_ACCESSOR (TF, 8)
|
||||
#define BxImmediate 0x000f // bits 3..0: any immediate
|
||||
#define BxImmediate_Ib 0x0001 // 8 bit
|
||||
#define BxImmediate_Ib_SE 0x0002 // sign extend to OS size
|
||||
#define BxImmediate_Iw 0x0003 // 16 bit or SSE4A IbIb immediate
|
||||
#define BxImmediate_IvIw 0x0004 // call_Ap, not encodable in 64-bit mode
|
||||
#define BxImmediate_Iw 0x0003 // 16 bit
|
||||
#define BxImmediate_IbIb 0x0004 // SSE4A
|
||||
#define BxImmediate_IwIb 0x0005 // enter_IwIb
|
||||
#define BxImmediate_Id 0x0006 // 32 bit
|
||||
#define BxImmediate_O 0x0007 // MOV_ALOd, mov_OdAL, mov_eAXOv, mov_OveAX
|
||||
#define BxImmediate_BrOff8 0x0008 // Relative branch offset byte
|
||||
#define BxImmediate_BrOff16 0x0009 // Relative branch offset word, not encodable in 64-bit mode
|
||||
#define BxImmediate_BrOff32 0x000A // Relative branch offset dword
|
||||
#define BxImmediate_IvIw 0x0006 // call_Ap, not encodable in 64-bit mode
|
||||
#define BxImmediate_Id 0x0007 // 32 bit
|
||||
#define BxImmediate_O 0x0008 // MOV_ALOd, mov_OdAL, mov_eAXOv, mov_OveAX
|
||||
#define BxImmediate_BrOff8 0x0009 // Relative branch offset byte
|
||||
#define BxImmediate_BrOff16 0x000A // Relative branch offset word, not encodable in 64-bit mode
|
||||
#define BxImmediate_BrOff32 0x000B // Relative branch offset dword
|
||||
#if BX_SUPPORT_X86_64
|
||||
#define BxImmediate_Iq 0x000B // 64 bit override
|
||||
#define BxImmediate_Iq 0x000C // 64 bit override
|
||||
#endif
|
||||
|
||||
#define BxImmediate_IbIb BxImmediate_Iw
|
||||
|
||||
// Lookup for opcode and attributes in another opcode tables
|
||||
// Totally 7 opcode groups supported
|
||||
#define BxGroupX 0x0070 // bits 6..4: opcode groups definition
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: fetchdecode.cc,v 1.150 2007-12-15 17:42:20 sshwarts Exp $
|
||||
// $Id: fetchdecode.cc,v 1.151 2007-12-16 20:47:09 sshwarts Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -2840,15 +2840,27 @@ modrm_done:
|
||||
return(0);
|
||||
}
|
||||
break;
|
||||
case BxImmediate_IbIb:
|
||||
if (ilen < remain) {
|
||||
instruction->IxIxForm.Ib = *iptr++;
|
||||
ilen++;
|
||||
}
|
||||
else return(0);
|
||||
if (ilen < remain) {
|
||||
instruction->IxIxForm.Ib2 = *iptr;
|
||||
ilen++;
|
||||
}
|
||||
else {
|
||||
return(0);
|
||||
}
|
||||
break;
|
||||
case BxImmediate_IwIb:
|
||||
if ((ilen+1) < remain) {
|
||||
instruction->IxIxForm.Iw = FetchWORD(iptr);
|
||||
iptr += 2;
|
||||
ilen += 2;
|
||||
}
|
||||
else {
|
||||
return(0);
|
||||
}
|
||||
else return(0);
|
||||
if (ilen < remain) {
|
||||
instruction->IxIxForm.Ib2 = *iptr;
|
||||
ilen++;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: fetchdecode64.cc,v 1.158 2007-12-15 17:42:20 sshwarts Exp $
|
||||
// $Id: fetchdecode64.cc,v 1.159 2007-12-16 20:47:10 sshwarts Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -3817,6 +3817,20 @@ modrm_done:
|
||||
return(0);
|
||||
}
|
||||
break;
|
||||
case BxImmediate_IbIb:
|
||||
if (ilen < remain) {
|
||||
instruction->IxIxForm.Ib = *iptr++;
|
||||
ilen++;
|
||||
}
|
||||
else return(0);
|
||||
if (ilen < remain) {
|
||||
instruction->IxIxForm.Ib2 = *iptr;
|
||||
ilen++;
|
||||
}
|
||||
else {
|
||||
return(0);
|
||||
}
|
||||
break;
|
||||
case BxImmediate_IwIb:
|
||||
if ((ilen+1) < remain) {
|
||||
instruction->IxIxForm.Iw = FetchWORD(iptr);
|
||||
@ -3852,8 +3866,7 @@ modrm_done:
|
||||
break;
|
||||
case BxImmediate_BrOff8:
|
||||
if (ilen < remain) {
|
||||
Bit8s temp8s = *iptr;
|
||||
instruction->modRMForm.Id = temp8s;
|
||||
instruction->modRMForm.Id = (Bit8s) (*iptr);
|
||||
ilen++;
|
||||
}
|
||||
else {
|
||||
|
Loading…
Reference in New Issue
Block a user