InstEmitHash32.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using ARMeilleure.Decoders;
  2. using ARMeilleure.IntermediateRepresentation;
  3. using ARMeilleure.Translation;
  4. using static ARMeilleure.Instructions.InstEmitHelper;
  5. using static ARMeilleure.Instructions.InstEmitHashHelper;
  6. namespace ARMeilleure.Instructions
  7. {
  8. static partial class InstEmit32
  9. {
  10. public static void Crc32b(ArmEmitterContext context)
  11. {
  12. EmitCrc32Call(context, ByteSizeLog2, false);
  13. }
  14. public static void Crc32h(ArmEmitterContext context)
  15. {
  16. EmitCrc32Call(context, HWordSizeLog2, false);
  17. }
  18. public static void Crc32w(ArmEmitterContext context)
  19. {
  20. EmitCrc32Call(context, WordSizeLog2, false);
  21. }
  22. public static void Crc32cb(ArmEmitterContext context)
  23. {
  24. EmitCrc32Call(context, ByteSizeLog2, true);
  25. }
  26. public static void Crc32ch(ArmEmitterContext context)
  27. {
  28. EmitCrc32Call(context, HWordSizeLog2, true);
  29. }
  30. public static void Crc32cw(ArmEmitterContext context)
  31. {
  32. EmitCrc32Call(context, WordSizeLog2, true);
  33. }
  34. private static void EmitCrc32Call(ArmEmitterContext context, int size, bool c)
  35. {
  36. IOpCode32AluReg op = (IOpCode32AluReg)context.CurrOp;
  37. Operand n = GetIntA32(context, op.Rn);
  38. Operand m = GetIntA32(context, op.Rm);
  39. Operand d = EmitCrc32(context, n, m, size, c);
  40. EmitAluStore(context, d);
  41. }
  42. }
  43. }