InstEmitHash.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using ARMeilleure.Decoders;
  2. using ARMeilleure.IntermediateRepresentation;
  3. using ARMeilleure.Translation;
  4. using System;
  5. using static ARMeilleure.Instructions.InstEmitHelper;
  6. namespace ARMeilleure.Instructions
  7. {
  8. static partial class InstEmit
  9. {
  10. public static void Crc32b(ArmEmitterContext context)
  11. {
  12. EmitCrc32Call(context, new _U32_U32_U8(SoftFallback.Crc32b));
  13. }
  14. public static void Crc32h(ArmEmitterContext context)
  15. {
  16. EmitCrc32Call(context, new _U32_U32_U16(SoftFallback.Crc32h));
  17. }
  18. public static void Crc32w(ArmEmitterContext context)
  19. {
  20. EmitCrc32Call(context, new _U32_U32_U32(SoftFallback.Crc32w));
  21. }
  22. public static void Crc32x(ArmEmitterContext context)
  23. {
  24. EmitCrc32Call(context, new _U32_U32_U64(SoftFallback.Crc32x));
  25. }
  26. public static void Crc32cb(ArmEmitterContext context)
  27. {
  28. EmitCrc32Call(context, new _U32_U32_U8(SoftFallback.Crc32cb));
  29. }
  30. public static void Crc32ch(ArmEmitterContext context)
  31. {
  32. EmitCrc32Call(context, new _U32_U32_U16(SoftFallback.Crc32ch));
  33. }
  34. public static void Crc32cw(ArmEmitterContext context)
  35. {
  36. EmitCrc32Call(context, new _U32_U32_U32(SoftFallback.Crc32cw));
  37. }
  38. public static void Crc32cx(ArmEmitterContext context)
  39. {
  40. EmitCrc32Call(context, new _U32_U32_U64(SoftFallback.Crc32cx));
  41. }
  42. private static void EmitCrc32Call(ArmEmitterContext context, Delegate dlg)
  43. {
  44. OpCodeAluBinary op = (OpCodeAluBinary)context.CurrOp;
  45. Operand n = GetIntOrZR(context, op.Rn);
  46. Operand m = GetIntOrZR(context, op.Rm);
  47. Operand d = context.Call(dlg, n, m);
  48. SetIntOrZR(context, op.Rd, d);
  49. }
  50. }
  51. }