Skip to content

Commit 8e2d740

Browse files
committed
implement flag push/pop
1 parent 0040e92 commit 8e2d740

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed

catnip/x64assembler.nim

+12
Original file line numberDiff line numberDiff line change
@@ -1029,3 +1029,15 @@ genAssembler shufps:
10291029
(regXmm, rmXmm, imm8): (rex, 0x0F, 0xC6, modrm(rm, reg), imm8)
10301030
genAssembler shufpd:
10311031
(regXmm, rmXmm, imm8): (0x66, rex, 0x0F, 0xC6, modrm(rm, reg), imm8)
1032+
1033+
genAssembler pushf:
1034+
(): (op16, 0x9C)
1035+
1036+
genAssembler pushfq:
1037+
(): (0x9C)
1038+
1039+
genAssembler popf:
1040+
(): (op16, 0x9D)
1041+
1042+
genAssembler popfq:
1043+
(): (0x9D)

tests/test1.nim

+19-7
Original file line numberDiff line numberDiff line change
@@ -342,18 +342,30 @@ proc main =
342342
s.jcc(condNotZero, funcStart)
343343
s.ret()
344344

345-
s.movbe(regAx, memMemOnly(regRax))
345+
s.movbe(regR15w, memMemOnly(regRax))
346346
s.movbe(regAx, memMemOnly(regR15))
347347
s.movbe(regEax, memMemOnly(regRax))
348348
s.movbe(regEax, memMemOnly(regR15))
349349
s.movbe(regRax, memMemOnly(regRax))
350350
s.movbe(regRax, memMemOnly(regR15))
351-
s.movbe(memMemOnly(regRax), regAx)
352-
s.movbe(memMemOnly(regR15), regAx)
353-
s.movbe(memMemOnly(regRax), regEax)
354-
s.movbe(memMemOnly(regR15), regEax)
355-
s.movbe(memMemOnly(regRax), regRax)
356-
s.movbe(memMemOnly(regR15), regRax)
351+
s.movbe(regAx, memMemOnly(regRax, regRax))
352+
s.movbe(regR12w, memMemOnly(regR15, regRbp))
353+
s.movbe(regAx, memMemOnly(regR15, regRax))
354+
s.movbe(regEax, memMemOnly(regRax, regRax))
355+
s.movbe(regEax, memMemOnly(regR15, regRax))
356+
s.movbe(regRax, memMemOnly(regRax, regRax))
357+
s.movbe(regRax, memMemOnly(regR15, regRax))
358+
s.movbe(memMemOnly(regRax, regRax), regAx)
359+
s.movbe(memMemOnly(regRax, regR15), regAx)
360+
s.movbe(memMemOnly(regRax, regRax), regEax)
361+
s.movbe(memMemOnly(regRax, regR15), regEax)
362+
s.movbe(memMemOnly(regRax, regRax), regRax)
363+
s.movbe(memMemOnly(regRax, regR15), regRax)
364+
365+
s.pushf()
366+
s.pushfq()
367+
s.popf()
368+
s.popfq()
357369

358370
let stream = newFileStream("assembled.bin", fmWrite)
359371
stream.writeData(addr data[0], s.offset)

0 commit comments

Comments
 (0)