1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/*
Copyright 2021-2023 Gabriel Jensen.
This file is part of Luma.
Luma is free software: you can redistribute it
and/or modify it under the terms of the GNU
Affero General Public License as published by
the Free Software Foundation, either version 3
of the License, or (at your option) any later
version.
Luma is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Affero General Public License for more details.
You should have received a copy of the GNU
Affero General Public License along with Luma.
If not, see <https://www.gnu.org/licenses/>.
*/
use crate::cpu::Cpu;
use crate::instruction::Instruction;
impl Cpu {
#[inline(always)]
pub(super) fn execute(&mut self, instruction: Instruction) {
use Instruction::*;
match instruction {
Adc(rd, rn, shifter, s) => self.isa_adc(rd, rn, shifter, s),
Add(rd, rn, shifter, s) => self.isa_add(rd, rn, shifter, s),
And(rd, rn, shifter, s) => self.isa_and(rd, rn, shifter, s),
B( imm) => self.isa_b( imm),
Bic(rd, rn, shifter, s) => self.isa_bic(rd, rn, shifter, s),
Bl( imm) => self.isa_bl( imm),
Bl0(imm) => self.isa_bl0(imm),
Bl1(imm) => self.isa_bl1(imm),
Bx( rm) => self.isa_bx( rm),
Cmn(rn, shifter) => self.isa_cmn(rn, shifter),
Cmp(rn, shifter) => self.isa_cmp(rn, shifter),
Eor(rd, rn, shifter, s) => self.isa_eor(rd, rn, shifter, s),
Mov(rd, shifter, s) => self.isa_mov(rd, shifter, s),
Mul(rd, rn, shifter, s) => self.isa_mul(rd, rn, shifter, s),
Mvn(rd, shifter, s) => self.isa_mvn(rd, shifter, s),
Orr(rd, rn, shifter, s) => self.isa_orr(rd, rn, shifter, s),
Rsb(rd, rn, shifter, s) => self.isa_rsb(rd, rn, shifter, s),
Rsc(rd, rn, shifter, s) => self.isa_rsc(rd, rn, shifter, s),
Sbc(rd, rn, shifter, s) => self.isa_sbc(rd, rn, shifter, s),
Sub(rd, rn, shifter, s) => self.isa_sub(rd, rn, shifter, s),
Swi(imm) => self.isa_swi(imm),
Teq(rn, shifter) => self.isa_teq(rn, shifter),
Tst(rn, shifter) => self.isa_tst(rn, shifter),
// Legacy:
LoadHalfword( rd, rn, imm) => self.isa_load_halfword( rd, rn, imm),
LoadImmediateOffset( rd, rn, imm) => self.isa_load_immediate_offset( rd, rn, imm),
LoadPc( rd, imm) => self.isa_load_pc( rd, imm),
StoreByteImmediateOffset(rd, rn, imm) => self.isa_store_byte_immediate_offset(rd, rn, imm),
StoreByteRegisterOffset( rd, rn, rm) => self.isa_store_byte_register_offset( rd, rn, rm),
StoreHalfword( rd, rn, imm) => self.isa_store_halfword( rd, rn, imm),
StoreImmediateOffset( rd, rn, imm) => self.isa_store_immediate_offset( rd, rn, imm),
Undefined => {},
};
}
}
|