blob: a7df33865562d7792e886781b9288b6251646103 (
plain)
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
|
#include "int.h"
#include <asm/assembler.h>
Op_int::Op_int(AsmArgs& args)
{
// At this point, the registration already ensured the number and types of args
AsmArgs::Immediate8 i {std::any_cast<AsmArgs::Immediate8>(args[0])};
if (i.value() == 0) { // INT 0
machine_code = { 0xCE };
} else if (i.value() == 1) { // INT 1
machine_code = { 0xF1 };
} else if (i.value() == 3) { // INT 3
machine_code = { 0xCC };
} else { // INT <...>
machine_code = std::vector<uint8_t>{ 0xCD, i.value() };
}
}
namespace {
bool registered { registerOp(mangleName<AsmArgs::Immediate8>("int"), [](AsmArgs& args) -> std::shared_ptr<Op>{
return std::make_shared<Op_int>(args);
}) };
}
|