Implement ADC, SBC

This commit is contained in:
Jeffrey Pfau 2013-04-26 01:25:31 -07:00
parent c61812325c
commit 301c07dda3
2 changed files with 18 additions and 9 deletions

View File

@ -54,13 +54,13 @@ union PSR {
struct {
enum PrivilegeMode priv : 5;
enum ExecutionMode t : 1;
int f : 1;
int i : 1;
int : 20;
int v : 1;
int c : 1;
int z : 1;
int n : 1;
unsigned f : 1;
unsigned i : 1;
unsigned : 20;
unsigned v : 1;
unsigned c : 1;
unsigned z : 1;
unsigned n : 1;
};
int32_t packed;

View File

@ -247,8 +247,17 @@ DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ASR2,
}
THUMB_NEUTRAL_S( , , cpu->gprs[rd]))
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ADC, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(SBC, ARM_STUB)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ADC,
int n = cpu->gprs[rn] + cpu->cpsr.c;
int d = cpu->gprs[rd];
cpu->gprs[rd] = d + n;
THUMB_ADDITION_S(d, n, cpu->gprs[rd]);)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(SBC,
int n = cpu->gprs[rn] + !cpu->cpsr.c;
int d = cpu->gprs[rd];
cpu->gprs[rd] = d - n;
THUMB_SUBTRACTION_S(d, n, cpu->gprs[rd]);)
DEFINE_DATA_FORM_5_INSTRUCTION_THUMB(ROR,
int rs = cpu->gprs[rn] & 0xFF;
if (rs) {