summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
diff options
context:
space:
mode:
authorGravatar ameerj2021-05-08 18:50:10 -0400
committerGravatar ameerj2021-07-22 21:51:30 -0400
commit941c6dc740ed368edbbc00913ace73dddecd43ba (patch)
tree8747fc4328791cf32e793d85dc5eaca9d9cded0a /src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
parentglasm: Use BitField instead of C bitfields (diff)
downloadyuzu-941c6dc740ed368edbbc00913ace73dddecd43ba.tar.gz
yuzu-941c6dc740ed368edbbc00913ace73dddecd43ba.tar.xz
yuzu-941c6dc740ed368edbbc00913ace73dddecd43ba.zip
glasm: Implement BFI, BFE
Along with implementations of common instructions along the way
Diffstat (limited to 'src/shader_recompiler/backend/glasm/emit_glasm_instructions.h')
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm_instructions.h66
1 files changed, 35 insertions, 31 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
index 30cc6c2eb..13f47b253 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
@@ -208,8 +208,8 @@ void EmitSelectU8(EmitContext& ctx, std::string_view cond, std::string_view true
208 std::string_view false_value); 208 std::string_view false_value);
209void EmitSelectU16(EmitContext& ctx, std::string_view cond, std::string_view true_value, 209void EmitSelectU16(EmitContext& ctx, std::string_view cond, std::string_view true_value,
210 std::string_view false_value); 210 std::string_view false_value);
211void EmitSelectU32(EmitContext& ctx, std::string_view cond, std::string_view true_value, 211void EmitSelectU32(EmitContext& ctx, IR::Inst& inst, std::string_view cond,
212 std::string_view false_value); 212 std::string_view true_value, std::string_view false_value);
213void EmitSelectU64(EmitContext& ctx, std::string_view cond, std::string_view true_value, 213void EmitSelectU64(EmitContext& ctx, std::string_view cond, std::string_view true_value,
214 std::string_view false_value); 214 std::string_view false_value);
215void EmitSelectF16(EmitContext& ctx, std::string_view cond, std::string_view true_value, 215void EmitSelectF16(EmitContext& ctx, std::string_view cond, std::string_view true_value,
@@ -332,14 +332,14 @@ void EmitFPIsNan16(EmitContext& ctx, std::string_view value);
332void EmitFPIsNan32(EmitContext& ctx, std::string_view value); 332void EmitFPIsNan32(EmitContext& ctx, std::string_view value);
333void EmitFPIsNan64(EmitContext& ctx, std::string_view value); 333void EmitFPIsNan64(EmitContext& ctx, std::string_view value);
334void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); 334void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
335void EmitIAdd64(EmitContext& ctx, std::string_view a, std::string_view b); 335void EmitIAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
336void EmitISub32(EmitContext& ctx, std::string_view a, std::string_view b); 336void EmitISub32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
337void EmitISub64(EmitContext& ctx, std::string_view a, std::string_view b); 337void EmitISub64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
338void EmitIMul32(EmitContext& ctx, std::string_view a, std::string_view b); 338void EmitIMul32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
339void EmitINeg32(EmitContext& ctx, std::string_view value); 339void EmitINeg32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
340void EmitINeg64(EmitContext& ctx, std::string_view value); 340void EmitINeg64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
341void EmitIAbs32(EmitContext& ctx, std::string_view value); 341void EmitIAbs32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
342void EmitIAbs64(EmitContext& ctx, std::string_view value); 342void EmitIAbs64(EmitContext& ctx, IR::Inst& inst, std::string_view value);
343void EmitShiftLeftLogical32(EmitContext& ctx, std::string_view base, std::string_view shift); 343void EmitShiftLeftLogical32(EmitContext& ctx, std::string_view base, std::string_view shift);
344void EmitShiftLeftLogical64(EmitContext& ctx, std::string_view base, std::string_view shift); 344void EmitShiftLeftLogical64(EmitContext& ctx, std::string_view base, std::string_view shift);
345void EmitShiftRightLogical32(EmitContext& ctx, std::string_view base, std::string_view shift); 345void EmitShiftRightLogical32(EmitContext& ctx, std::string_view base, std::string_view shift);
@@ -349,35 +349,39 @@ void EmitShiftRightArithmetic64(EmitContext& ctx, std::string_view base, std::st
349void EmitBitwiseAnd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); 349void EmitBitwiseAnd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
350void EmitBitwiseOr32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); 350void EmitBitwiseOr32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
351void EmitBitwiseXor32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); 351void EmitBitwiseXor32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
352void EmitBitFieldInsert(EmitContext& ctx, std::string_view base, std::string_view insert, 352void EmitBitFieldInsert(EmitContext& ctx, IR::Inst& inst, std::string_view base,
353 std::string_view offset, std::string_view count); 353 std::string_view insert, std::string_view offset, std::string_view count);
354void EmitBitFieldSExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base, 354void EmitBitFieldSExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base,
355 std::string_view offset, std::string_view count); 355 std::string_view offset, std::string_view count);
356void EmitBitFieldUExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base, 356void EmitBitFieldUExtract(EmitContext& ctx, IR::Inst& inst, std::string_view base,
357 std::string_view offset, std::string_view count); 357 std::string_view offset, std::string_view count);
358void EmitBitReverse32(EmitContext& ctx, std::string_view value); 358void EmitBitReverse32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
359void EmitBitCount32(EmitContext& ctx, std::string_view value); 359void EmitBitCount32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
360void EmitBitwiseNot32(EmitContext& ctx, std::string_view value); 360void EmitBitwiseNot32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
361void EmitFindSMsb32(EmitContext& ctx, std::string_view value); 361void EmitFindSMsb32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
362void EmitFindUMsb32(EmitContext& ctx, std::string_view value); 362void EmitFindUMsb32(EmitContext& ctx, IR::Inst& inst, std::string_view value);
363void EmitSMin32(EmitContext& ctx, std::string_view a, std::string_view b); 363void EmitSMin32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
364void EmitUMin32(EmitContext& ctx, std::string_view a, std::string_view b); 364void EmitUMin32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
365void EmitSMax32(EmitContext& ctx, std::string_view a, std::string_view b); 365void EmitSMax32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
366void EmitUMax32(EmitContext& ctx, std::string_view a, std::string_view b); 366void EmitUMax32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b);
367void EmitSClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min, 367void EmitSClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min,
368 std::string_view max); 368 std::string_view max);
369void EmitUClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min, 369void EmitUClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view min,
370 std::string_view max); 370 std::string_view max);
371void EmitSLessThan(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 371void EmitSLessThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
372void EmitULessThan(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 372void EmitULessThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
373void EmitIEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 373void EmitIEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
374void EmitSLessThanEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 374void EmitSLessThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
375void EmitULessThanEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 375 std::string_view rhs);
376void EmitSGreaterThan(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 376void EmitULessThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
377void EmitUGreaterThan(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 377 std::string_view rhs);
378void EmitINotEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 378void EmitSGreaterThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
379void EmitSGreaterThanEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 379void EmitUGreaterThan(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
380void EmitUGreaterThanEqual(EmitContext& ctx, std::string_view lhs, std::string_view rhs); 380void EmitINotEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs);
381void EmitSGreaterThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
382 std::string_view rhs);
383void EmitUGreaterThanEqual(EmitContext& ctx, IR::Inst& inst, std::string_view lhs,
384 std::string_view rhs);
381void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string_view pointer_offset, 385void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string_view pointer_offset,
382 std::string_view value); 386 std::string_view value);
383void EmitSharedAtomicSMin32(EmitContext& ctx, std::string_view pointer_offset, 387void EmitSharedAtomicSMin32(EmitContext& ctx, std::string_view pointer_offset,