Skip to content

Commit

Permalink
Added Move/MoveA to IEE-ALU
Browse files Browse the repository at this point in the history
  • Loading branch information
Kalmalyzer committed Dec 25, 2012
1 parent ce91a3f commit 95b7296
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
26 changes: 26 additions & 0 deletions M68060InstructionExecution/M68060IeeAlu.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,22 @@ static void evaluateNegX(OperationSize operationSize, Flags flags, uint32_t ieeB
evaluateSubXCommon(operationSize, flags, ieeBValue, 0, ieeResult, flagsModifier);
}

static void evaluateMove(OperationSize operationSize, uint32_t ieeAValue, uint32_t ieeBValue, uint32_t* ieeResult, FlagsModifier* flagsModifier)
{
uint32_t operationMask = getOperationMask(operationSize);
uint32_t operationHighestBitMask = operationMask - (operationMask >> 1);

setFlagsModifierNZVC(ieeAValue & operationHighestBitMask, !(ieeAValue & operationMask), false, false, flagsModifier);

*ieeResult = mask(ieeAValue, ieeBValue, operationMask);
}

static void evaluateMoveA(OperationSize operationSize, uint32_t ieeAValue, uint32_t* ieeResult)
{
uint32_t ieeAValue32Bits = extendValueTo32Bits(operationSize, ieeAValue);
*ieeResult = ieeAValue32Bits;
}

static void evaluateTst(OperationSize operationSize, uint32_t ieeBValue, FlagsModifier* flagsModifier)
{
uint32_t operationMask = getOperationMask(operationSize);
Expand Down Expand Up @@ -540,6 +556,16 @@ void evaluateIeeAluOperation(IeeOperation ieeOperation, OperationSize operationS
evaluateSubX(operationSize, flags, ieeAValue, ieeBValue, ieeResult, flagsModifier);
break;
}
case IeeOperation_Move:
{
evaluateMove(operationSize, ieeAValue, ieeBValue, ieeResult, flagsModifier);
break;
}
case IeeOperation_MoveA:
{
evaluateMoveA(operationSize, ieeAValue, ieeResult);
break;
}
case IeeOperation_Neg:
{
evaluateNeg(operationSize, ieeBValue, ieeResult, flagsModifier);
Expand Down
4 changes: 4 additions & 0 deletions M68060InstructionExecution/TestIeeAlu.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ IeeAluTest tests[] =
{ "suba.w 0x8000,0x123456fc", IeeOperation_SubA, OperationSize_Word, 0, 0x00008000, 0x123456fc, 0x1234d6fc, { Flags_All_Mask, 0, }, },
{ "suba.l 0x10000001,0x123456fc", IeeOperation_SubA, OperationSize_Long, 0, 0x10000001, 0x123456fc, 0x023456fb, { Flags_All_Mask, 0, }, },
{ "subx.w 0x1234,0x12345678 (X)", IeeOperation_SubX, OperationSize_Word, Flags_Extend_Mask, 0x00001234, 0x12345678, 0x12344445, { 0, 0, }, },
{ "move.b 0x12,0x123456fc", IeeOperation_Move, OperationSize_Byte, 0, 0x00000012, 0x123456fc, 0x12345612, { Flags_Extend_Mask, 0, }, },
{ "move.l 0x87654321,0x123456fc", IeeOperation_Move, OperationSize_Long, 0, 0x87654321, 0x123456fc, 0x87654321, { Flags_Extend_Mask, Flags_Negative_Mask, }, },
{ "movea.w 0x1234,0x12345678", IeeOperation_MoveA, OperationSize_Word, 0, 0x00001234, 0x12345678, 0x00001234, { Flags_All_Mask, 0, }, },
{ "movea.l 0x12345678,0x87654321", IeeOperation_MoveA, OperationSize_Long, 0, 0x12345678, 0x87654321, 0x12345678, { Flags_All_Mask, 0, }, },
{ "cmp.b 0x7f,0xff", IeeOperation_Cmp, OperationSize_Byte, 0, 0x0000007f, 0x000000ff, 0x00000000, { Flags_Extend_Mask, Flags_Negative_Mask, }, },
{ "cmp.b 0x20,0x40", IeeOperation_Cmp, OperationSize_Byte, 0, 0x00000020, 0x00000040, 0x00000000, { Flags_Extend_Mask, 0, }, },
{ "cmp.w 0x0040,0x0020", IeeOperation_Cmp, OperationSize_Word, 0, 0x00000040, 0x00000020, 0x00000000, { Flags_Extend_Mask, Flags_Negative_Mask | Flags_Carry_Mask, }, },
Expand Down

0 comments on commit 95b7296

Please sign in to comment.