Skip to content

Commit 60fc5f2

Browse files
committed
updated jitasm for building it in release/debug configuration with target x86 32/64-bit mode and added more experimental stuff
1 parent 982f16f commit 60fc5f2

9 files changed

+1268
-386
lines changed

jitasm.Backend.x86.cpp

+493-184
Large diffs are not rendered by default.

jitasm.Backend.x86.h

+19-19
Original file line numberDiff line numberDiff line change
@@ -240,45 +240,45 @@ namespace jitasm
240240
{
241241
uint32 opcode = instr.opcode_;
242242

243-
auto const & opd1 = instr.GetOpd(0).IsDummy() ? detail::Opd() : instr.GetOpd(0);
244-
auto const & opd2 = instr.GetOpd(1).IsDummy() ? detail::Opd() : instr.GetOpd(1);
245-
auto const & opd3 = instr.GetOpd(2).IsDummy() ? detail::Opd() : instr.GetOpd(2);
246-
auto const & opd4 = instr.GetOpd(3).IsDummy() ? detail::Opd() : instr.GetOpd(3);
243+
auto const & opd0 = instr.GetOpd(0).IsDummy() ? detail::Opd() : instr.GetOpd(0);
244+
auto const & opd1 = instr.GetOpd(1).IsDummy() ? detail::Opd() : instr.GetOpd(1);
245+
auto const & opd2 = instr.GetOpd(2).IsDummy() ? detail::Opd() : instr.GetOpd(2);
246+
auto const & opd3 = instr.GetOpd(3).IsDummy() ? detail::Opd() : instr.GetOpd(3);
247247

248248
// +rb, +rw, +rd, +ro
249-
if (opd1.IsReg() && (opd2.IsNone() || opd2.IsImm()))
249+
if (opd0.IsReg() && (opd1.IsNone() || opd1.IsImm()))
250250
{
251-
opcode += opd1.GetReg().id & 0x7;
251+
opcode += opd0.GetReg().id & 0x7;
252252
}
253253

254-
if ((opd1.IsImm() || opd1.IsReg()) && (opd2.IsReg() || opd2.IsMem()))
254+
if ((opd0.IsImm() || opd0.IsReg()) && (opd1.IsReg() || opd1.IsMem()))
255255
{ // ModR/M
256-
auto const & reg = opd1;
257-
auto const & r_m = opd2;
258-
auto const & vex = opd3;
256+
auto const & reg = opd0;
257+
auto const & r_m = opd1;
258+
auto const & vex = opd2;
259259
EncodePrefixes(instr.encoding_flags_, reg, r_m, vex);
260260
EncodeOpcode(opcode);
261261
EncodeModRM((uint8)(reg.IsImm() ? reg.GetImm() : reg.GetReg().id), r_m);
262262

263263
// /is4
264-
if (opd4.IsReg())
264+
if (opd3.IsReg())
265265
{
266-
EncodeImm(Imm8(static_cast<uint8>(opd4.GetReg().id << 4)));
266+
EncodeImm(Imm8(static_cast<uint8>(opd3.GetReg().id << 4)));
267267
}
268268
}
269269
else
270270
{
271271
auto const & reg = detail::Opd();
272-
auto const & r_m = opd1.IsReg() ? opd1 : detail::Opd();
272+
auto const & r_m = opd0.IsReg() ? opd0 : detail::Opd();
273273
auto const & vex = detail::Opd();
274274
EncodePrefixes(instr.encoding_flags_, reg, r_m, vex);
275275
EncodeOpcode(opcode);
276276
}
277277

278-
if (opd1.IsImm() && !opd2.IsReg() && !opd2.IsMem()) EncodeImm(opd1);
278+
if (opd0.IsImm() && !opd1.IsReg() && !opd1.IsMem()) EncodeImm(opd0);
279+
if (opd1.IsImm()) EncodeImm(opd1);
279280
if (opd2.IsImm()) EncodeImm(opd2);
280281
if (opd3.IsImm()) EncodeImm(opd3);
281-
if (opd4.IsImm()) EncodeImm(opd4);
282282
}
283283

284284
void EncodeInstr(Instr & instr);
@@ -292,10 +292,10 @@ namespace jitasm
292292
case I_ALIGN: EncodeMultiNop(instr.GetOpd(0)); break;
293293
case I_NULL: break;
294294
case I_SOURCE: EncodeSource(instr.GetOpd(0)); break;
295-
case I_DB: EncodeImm(instr.GetOpd(0)); break;
296-
case I_DW: EncodeImm(instr.GetOpd(0)); break;
297-
case I_DD: EncodeImm(instr.GetOpd(0)); break;
298-
case I_DQ: EncodeImm(instr.GetOpd(0)); break;
295+
case I_DB: db(instr.GetOpd(0).GetImm()); break;
296+
case I_DW: dw(instr.GetOpd(0).GetImm()); break;
297+
case I_DD: dd(instr.GetOpd(0).GetImm()); break;
298+
case I_DQ: dq(instr.GetOpd(0).GetImm()); break;
299299
default: Encode(instr); break;
300300
}
301301
}

jitasm.Frontend.x86.h

+257
Large diffs are not rendered by default.

jitasm.Frontend.x86_32.h

+21
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,27 @@ namespace jitasm
100100
virtual ~Frontend$CRTP()
101101
{
102102
}
103+
104+
/////////////
105+
106+
void aaa() { AppendInstr(I_AAA); }
107+
108+
void aad() { AppendInstr(I_AAD); }
109+
110+
void aam() { AppendInstr(I_AAM); }
111+
112+
void aas() { AppendInstr(I_AAS); }
113+
114+
void adx(Imm8 const & a1) { AppendInstr(I_ADX, a1); }
115+
116+
void amx(Imm8 const & a1) { AppendInstr(I_AMX, a1); }
117+
118+
void arpl(Mem16 const & a1, Reg16 const & a2) { AppendInstr(I_ARPL, a1, a2); }
119+
120+
void bound(Reg16 const & a1, Mem32 const & a2) { AppendInstr(I_BOUND, a1, a2); }
121+
void bound(Reg32 const & a1, Mem64 const & a2) { AppendInstr(I_BOUND, a1, a2); }
122+
123+
103124
};
104125
}
105126
}

jitasm.Frontend.x86_64.h

+118
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,124 @@ namespace jitasm
186186
virtual ~Frontend$CRTP()
187187
{
188188
}
189+
190+
/////////////
191+
192+
void adc(Reg64 const & a1, Imm32 const & a2) { AppendInstr(I_ADC, a1, a2); }
193+
void adc(Mem64 const & a1, Imm32 const & a2) { AppendInstr(I_ADC, a1, a2); }
194+
void adc(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_ADC, a1, a2); }
195+
void adc(Reg64 const & a1, Mem64 const & a2) { AppendInstr(I_ADC, a1, a2); }
196+
void adc(Mem64 const & a1, Reg64 const & a2) { AppendInstr(I_ADC, a1, a2); }
197+
198+
void add(Reg64 const & a1, Imm32 const & a2) { AppendInstr(I_ADD, a1, a2); }
199+
void add(Mem64 const & a1, Imm32 const & a2) { AppendInstr(I_ADD, a1, a2); }
200+
void add(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_ADD, a1, a2); }
201+
void add(Reg64 const & a1, Mem64 const & a2) { AppendInstr(I_ADD, a1, a2); }
202+
void add(Mem64 const & a1, Reg64 const & a2) { AppendInstr(I_ADD, a1, a2); }
203+
204+
void and(Reg64 const & a1, Imm32 const & a2) { AppendInstr(I_AND, a1, a2); }
205+
void and(Mem64 const & a1, Imm32 const & a2) { AppendInstr(I_AND, a1, a2); }
206+
void and(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_AND, a1, a2); }
207+
void and(Reg64 const & a1, Mem64 const & a2) { AppendInstr(I_AND, a1, a2); }
208+
void and(Mem64 const & a1, Reg64 const & a2) { AppendInstr(I_AND, a1, a2); }
209+
210+
void bsf(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_BSF, a1, a2); }
211+
void bsf(Reg64 const & a1, Mem64 const & a2) { AppendInstr(I_BSF, a1, a2); }
212+
213+
void bsr(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_BSR, a1, a2); }
214+
void bsr(Reg64 const & a1, Mem64 const & a2) { AppendInstr(I_BSR, a1, a2); }
215+
216+
void bswap(Reg64 const & a1) { AppendInstr(I_BSWAP, a1); }
217+
218+
void bt(Reg64 const & a1, Imm8 const & a2) { AppendInstr(I_BT, a1, a2); }
219+
void bt(Mem64 const & a1, Imm8 const & a2) { AppendInstr(I_BT, a1, a2); }
220+
void bt(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_BT, a1, a2); }
221+
void bt(Mem64 const & a1, Reg64 const & a2) { AppendInstr(I_BT, a1, a2); }
222+
223+
void btc(Reg64 const & a1, Imm8 const & a2) { AppendInstr(I_BTC, a1, a2); }
224+
void btc(Mem64 const & a1, Imm8 const & a2) { AppendInstr(I_BTC, a1, a2); }
225+
void btc(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_BTC, a1, a2); }
226+
void btc(Mem64 const & a1, Reg64 const & a2) { AppendInstr(I_BTC, a1, a2); }
227+
228+
void btr(Reg64 const & a1, Imm8 const & a2) { AppendInstr(I_BTR, a1, a2); }
229+
void btr(Mem64 const & a1, Imm8 const & a2) { AppendInstr(I_BTR, a1, a2); }
230+
void btr(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_BTR, a1, a2); }
231+
void btr(Mem64 const & a1, Reg64 const & a2) { AppendInstr(I_BTR, a1, a2); }
232+
233+
void bts(Reg64 const & a1, Imm8 const & a2) { AppendInstr(I_BTS, a1, a2); }
234+
void bts(Mem64 const & a1, Imm8 const & a2) { AppendInstr(I_BTS, a1, a2); }
235+
void bts(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_BTS, a1, a2); }
236+
void bts(Mem64 const & a1, Reg64 const & a2) { AppendInstr(I_BTS, a1, a2); }
237+
238+
void cdqe() { AppendInstr(I_CDQE); }
239+
240+
void cmovcc(ConditionCode cc, Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, cc, a1, a2); }
241+
void cmovcc(ConditionCode cc, Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, cc, a1, a2); }
242+
void cmovo(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_O, a1, a2); }
243+
void cmovo(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_O, a1, a2); }
244+
void cmovno(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_NO, a1, a2); }
245+
void cmovno(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_NO, a1, a2); }
246+
void cmovb(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_B, a1, a2); }
247+
void cmovb(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_B, a1, a2); }
248+
void cmovc(Reg64 const & a1, Reg64 const & a2) { cmovb(a1, a2); }
249+
void cmovc(Reg64 const & a1, Mem64 const & a2) { cmovb(a1, a2); }
250+
void cmovnae(Reg64 const & a1, Reg64 const & a2) { cmovb(a1, a2); }
251+
void cmovnae(Reg64 const & a1, Mem64 const & a2) { cmovb(a1, a2); }
252+
void cmovae(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_AE, a1, a2); }
253+
void cmovae(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_AE, a1, a2); }
254+
void cmovnb(Reg64 const & a1, Reg64 const & a2) { cmovae(a1, a2); }
255+
void cmovnb(Reg64 const & a1, Mem64 const & a2) { cmovae(a1, a2); }
256+
void cmovnc(Reg64 const & a1, Reg64 const & a2) { cmovae(a1, a2); }
257+
void cmovnc(Reg64 const & a1, Mem64 const & a2) { cmovae(a1, a2); }
258+
void cmove(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_E, a1, a2); }
259+
void cmove(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_E, a1, a2); }
260+
void cmovz(Reg64 const & a1, Reg64 const & a2) { cmove(a1, a2); }
261+
void cmovz(Reg64 const & a1, Mem64 const & a2) { cmove(a1, a2); }
262+
void cmovne(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_NE, a1, a2); }
263+
void cmovne(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_NE, a1, a2); }
264+
void cmovnz(Reg64 const & a1, Reg64 const & a2) { cmovne(a1, a2); }
265+
void cmovnz(Reg64 const & a1, Mem64 const & a2) { cmovne(a1, a2); }
266+
void cmovbe(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_BE, a1, a2); }
267+
void cmovbe(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_BE, a1, a2); }
268+
void cmovna(Reg64 const & a1, Reg64 const & a2) { cmovbe(a1, a2); }
269+
void cmovna(Reg64 const & a1, Mem64 const & a2) { cmovbe(a1, a2); }
270+
void cmova(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_A, a1, a2); }
271+
void cmova(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_A, a1, a2); }
272+
void cmovnbe(Reg64 const & a1, Reg64 const & a2) { cmova(a1, a2); }
273+
void cmovnbe(Reg64 const & a1, Mem64 const & a2) { cmova(a1, a2); }
274+
void cmovs(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_S, a1, a2); }
275+
void cmovs(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_S, a1, a2); }
276+
void cmovns(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_NS, a1, a2); }
277+
void cmovns(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_NS, a1, a2); }
278+
void cmovp(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_P, a1, a2); }
279+
void cmovp(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_P, a1, a2); }
280+
void cmovnpe(Reg64 const & a1, Reg64 const & a2) { cmovp(a1, a2); }
281+
void cmovnpe(Reg64 const & a1, Mem64 const & a2) { cmovp(a1, a2); }
282+
void cmovnp(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_NP, a1, a2); }
283+
void cmovnp(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_NP, a1, a2); }
284+
void cmovnpo(Reg64 const & a1, Reg64 const & a2) { cmovnp(a1, a2); }
285+
void cmovnpo(Reg64 const & a1, Mem64 const & a2) { cmovnp(a1, a2); }
286+
void cmovge(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_GE, a1, a2); }
287+
void cmovge(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_GE, a1, a2); }
288+
void cmovnl(Reg64 const & a1, Reg64 const & a2) { cmovge(a1, a2); }
289+
void cmovnl(Reg64 const & a1, Mem64 const & a2) { cmovge(a1, a2); }
290+
void cmovle(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_LE, a1, a2); }
291+
void cmovle(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_LE, a1, a2); }
292+
void cmovng(Reg64 const & a1, Reg64 const & a2) { cmovle(a1, a2); }
293+
void cmovng(Reg64 const & a1, Mem64 const & a2) { cmovle(a1, a2); }
294+
void cmovg(Reg64 const & a1, Reg64 const & a2) { AppendCondInstr(I_CMOVcc, CC_G, a1, a2); }
295+
void cmovg(Reg64 const & a1, Mem64 const & a2) { AppendCondInstr(I_CMOVcc, CC_G, a1, a2); }
296+
void cmovnle(Reg64 const & a1, Reg64 const & a2) { cmovg(a1, a2); }
297+
void cmovnle(Reg64 const & a1, Mem64 const & a2) { cmovg(a1, a2); }
298+
299+
void cmp(Reg64 const & a1, Imm32 const & a2) { AppendInstr(I_CMP, a1, a2); }
300+
void cmp(Mem64 const & a1, Imm32 const & a2) { AppendInstr(I_CMP, a1, a2); }
301+
void cmp(Reg64 const & a1, Reg64 const & a2) { AppendInstr(I_CMP, a1, a2); }
302+
void cmp(Reg64 const & a1, Mem64 const & a2) { AppendInstr(I_CMP, a1, a2); }
303+
void cmp(Mem64 const & a1, Reg64 const & a2) { AppendInstr(I_CMP, a1, a2); }
304+
305+
void cqo() { AppendInstr(I_CQO); }
306+
189307
};
190308
}
191309
}

jitasm.sln

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio 2013
4-
VisualStudioVersion = 12.0.30723.0
4+
VisualStudioVersion = 12.0.31101.0
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jitasm", "jitasm.vcxproj", "{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}"
77
EndProject
@@ -12,16 +12,26 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "test\test.vcxproj",
1212
EndProject
1313
Global
1414
GlobalSection(SolutionConfigurationPlatforms) = preSolution
15+
Debug|Win32 = Debug|Win32
1516
Debug|x64 = Debug|x64
17+
Release|Win32 = Release|Win32
1618
Release|x64 = Release|x64
1719
EndGlobalSection
1820
GlobalSection(ProjectConfigurationPlatforms) = postSolution
21+
{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}.Debug|Win32.ActiveCfg = Debug|Win32
22+
{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}.Debug|Win32.Build.0 = Debug|Win32
1923
{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}.Debug|x64.ActiveCfg = Debug|x64
2024
{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}.Debug|x64.Build.0 = Debug|x64
25+
{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}.Release|Win32.ActiveCfg = Release|Win32
26+
{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}.Release|Win32.Build.0 = Release|Win32
2127
{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}.Release|x64.ActiveCfg = Release|x64
2228
{A8B1E13C-9EC9-482A-A4BB-A1F3F9796AF3}.Release|x64.Build.0 = Release|x64
29+
{4EC7B156-8FE1-42D7-9598-236DC01BE727}.Debug|Win32.ActiveCfg = Debug|Win32
30+
{4EC7B156-8FE1-42D7-9598-236DC01BE727}.Debug|Win32.Build.0 = Debug|Win32
2331
{4EC7B156-8FE1-42D7-9598-236DC01BE727}.Debug|x64.ActiveCfg = Debug|x64
2432
{4EC7B156-8FE1-42D7-9598-236DC01BE727}.Debug|x64.Build.0 = Debug|x64
33+
{4EC7B156-8FE1-42D7-9598-236DC01BE727}.Release|Win32.ActiveCfg = Release|Win32
34+
{4EC7B156-8FE1-42D7-9598-236DC01BE727}.Release|Win32.Build.0 = Release|Win32
2535
{4EC7B156-8FE1-42D7-9598-236DC01BE727}.Release|x64.ActiveCfg = Release|x64
2636
{4EC7B156-8FE1-42D7-9598-236DC01BE727}.Release|x64.Build.0 = Release|x64
2737
EndGlobalSection

jitasm.vcxproj

+7-2
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,12 @@
9898
<WarningLevel>Level3</WarningLevel>
9999
<PrecompiledHeader>
100100
</PrecompiledHeader>
101-
<Optimization>MaxSpeed</Optimization>
101+
<Optimization>Full</Optimization>
102102
<FunctionLevelLinking>true</FunctionLevelLinking>
103103
<IntrinsicFunctions>true</IntrinsicFunctions>
104104
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
105+
<OmitFramePointers>true</OmitFramePointers>
106+
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
105107
</ClCompile>
106108
<Link>
107109
<SubSystem>Windows</SubSystem>
@@ -115,10 +117,12 @@
115117
<WarningLevel>Level3</WarningLevel>
116118
<PrecompiledHeader>
117119
</PrecompiledHeader>
118-
<Optimization>Disabled</Optimization>
120+
<Optimization>Full</Optimization>
119121
<FunctionLevelLinking>true</FunctionLevelLinking>
120122
<IntrinsicFunctions>true</IntrinsicFunctions>
121123
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
124+
<OmitFramePointers>true</OmitFramePointers>
125+
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
122126
</ClCompile>
123127
<Link>
124128
<SubSystem>Windows</SubSystem>
@@ -134,6 +138,7 @@
134138
<ClInclude Include="jitasm.Backend.x86.h" />
135139
<ClInclude Include="jitasm.CodeBuffer.h" />
136140
<ClInclude Include="jitasm.Frontend.h" />
141+
<ClInclude Include="jitasm.Frontend.x86.wrappers.h" />
137142
<ClInclude Include="jitasm.Frontend.x86_32.h" />
138143
<ClInclude Include="jitasm.Frontend.x86_64.h" />
139144
<ClInclude Include="jitasm.Frontend.x86.h" />

jitasm.vcxproj.filters

+3
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@
5454
<ClInclude Include="jitasm.CodeBuffer.h">
5555
<Filter>Header Files</Filter>
5656
</ClInclude>
57+
<ClInclude Include="jitasm.Frontend.x86.wrappers.h">
58+
<Filter>Header Files</Filter>
59+
</ClInclude>
5760
</ItemGroup>
5861
<ItemGroup>
5962
<ClCompile Include="jitasm.Backend.x86.cpp">

0 commit comments

Comments
 (0)