From b9c8814ea978d2192522f9c85c07c00280bc1696 Mon Sep 17 00:00:00 2001
From: ReinUsesLisp <reinuseslisp@airmail.cc>
Date: Wed, 26 May 2021 15:40:16 -0300
Subject: [PATCH] glasm: Implement undef instructions

---
 .../backend/glasm/emit_glasm_instructions.h   | 10 +++++-----
 .../glasm/emit_glasm_not_implemented.cpp      | 20 +++++++++----------
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
index cc7aa8e20b..c24c7a71df 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
@@ -74,11 +74,11 @@ void EmitIsHelperInvocation(EmitContext& ctx, IR::Inst& inst);
 void EmitYDirection(EmitContext& ctx);
 void EmitLoadLocal(EmitContext& ctx, IR::Inst& inst, ScalarU32 word_offset);
 void EmitWriteLocal(EmitContext& ctx, ScalarU32 word_offset, ScalarU32 value);
-void EmitUndefU1(EmitContext& ctx);
-void EmitUndefU8(EmitContext& ctx);
-void EmitUndefU16(EmitContext& ctx);
-void EmitUndefU32(EmitContext& ctx);
-void EmitUndefU64(EmitContext& ctx);
+void EmitUndefU1(EmitContext& ctx, IR::Inst& inst);
+void EmitUndefU8(EmitContext& ctx, IR::Inst& inst);
+void EmitUndefU16(EmitContext& ctx, IR::Inst& inst);
+void EmitUndefU32(EmitContext& ctx, IR::Inst& inst);
+void EmitUndefU64(EmitContext& ctx, IR::Inst& inst);
 void EmitLoadGlobalU8(EmitContext& ctx, IR::Inst& inst, Register address);
 void EmitLoadGlobalS8(EmitContext& ctx, IR::Inst& inst, Register address);
 void EmitLoadGlobalU16(EmitContext& ctx, IR::Inst& inst, Register address);
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp
index e9d1e0d6bf..c76b45b8b5 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_not_implemented.cpp
@@ -209,24 +209,24 @@ void EmitYDirection(EmitContext& ctx) {
     NotImplemented();
 }
 
-void EmitUndefU1(EmitContext& ctx) {
-    NotImplemented();
+void EmitUndefU1(EmitContext& ctx, IR::Inst& inst) {
+    ctx.Add("MOV.S {}.x,0;", inst);
 }
 
-void EmitUndefU8(EmitContext& ctx) {
-    NotImplemented();
+void EmitUndefU8(EmitContext& ctx, IR::Inst& inst) {
+    ctx.Add("MOV.S {}.x,0;", inst);
 }
 
-void EmitUndefU16(EmitContext& ctx) {
-    NotImplemented();
+void EmitUndefU16(EmitContext& ctx, IR::Inst& inst) {
+    ctx.Add("MOV.S {}.x,0;", inst);
 }
 
-void EmitUndefU32(EmitContext& ctx) {
-    NotImplemented();
+void EmitUndefU32(EmitContext& ctx, IR::Inst& inst) {
+    ctx.Add("MOV.S {}.x,0;\n", inst);
 }
 
-void EmitUndefU64(EmitContext& ctx) {
-    NotImplemented();
+void EmitUndefU64(EmitContext& ctx, IR::Inst& inst) {
+    ctx.LongAdd("MOV.S64 {}.x,0;", inst);
 }
 
 void EmitGetZeroFromOp(EmitContext& ctx) {