aboutsummaryrefslogtreecommitdiffhomepage
path: root/externals/xbyak/sample/no_flags.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'externals/xbyak/sample/no_flags.cpp')
-rw-r--r--externals/xbyak/sample/no_flags.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/externals/xbyak/sample/no_flags.cpp b/externals/xbyak/sample/no_flags.cpp
new file mode 100644
index 00000000..52977b4b
--- /dev/null
+++ b/externals/xbyak/sample/no_flags.cpp
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <xbyak/xbyak.h>
+
+struct Code : Xbyak::CodeGenerator {
+ Code(bool nf) {
+ xor_(eax, eax); // CF = 0
+ mov(eax, -1);
+ if (nf) {
+ puts("no flags (with T_nf)");
+ add(eax|T_nf, eax, 1); // does not change CF
+ } else {
+ puts("change flags (without T_nf)");
+ add(eax, eax, 1); // CF = 1
+ }
+ adc(eax, 0); // eax = CF ? 1 : 0
+ ret();
+ }
+};
+
+int main() {
+ for (int i = 0; i < 2; i++) {
+ Code c(i);
+ printf("i=%d ret=%d\n", i, c.getCode<int(*)()>()());
+ }
+}