Advertisement
Guest User

Untitled

a guest
Jun 1st, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 4.26 KB | None | 0 0
  1. diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
  2. index 695d871220..393b55fd11 100644
  3. --- a/tests/checkasm/checkasm.h
  4. +++ b/tests/checkasm/checkasm.h
  5. @@ -84,6 +84,7 @@ static av_unused void *func_ref, *func_new;
  6.  /* Declare the function prototype. The first argument is the return value, the remaining
  7.   * arguments are the function parameters. Naming parameters is optional. */
  8.  #define declare_func(ret, ...) declare_new(ret, __VA_ARGS__) typedef ret func_type(__VA_ARGS__)
  9. +#define declare_func_float(ret, ...) declare_new_float(ret, __VA_ARGS__) typedef ret func_type(__VA_ARGS__)
  10.  #define declare_func_emms(cpu_flags, ret, ...) declare_new_emms(cpu_flags, ret, __VA_ARGS__) typedef ret func_type(__VA_ARGS__)
  11.  
  12.  /* Indicate that the current test has failed */
  13. @@ -102,6 +103,7 @@ void checkasm_checked_call(void *func, ...);
  14.  /* Verifies that clobbered callee-saved registers are properly saved and restored
  15.   * and issues emms for asm functions which are not required to do so */
  16.  void checkasm_checked_call_emms(void *func, ...);
  17. +void checkasm_checked_call_float(void *func, ...);
  18.  
  19.  #if ARCH_X86_64
  20.  /* Evil hack: detect incorrect assumptions that 32-bit ints are zero-extended to 64-bit.
  21. @@ -116,6 +118,8 @@ void checkasm_checked_call_emms(void *func, ...);
  22.  void checkasm_stack_clobber(uint64_t clobber, ...);
  23.  #define declare_new(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, __VA_ARGS__)\
  24.                                = (void *)checkasm_checked_call;
  25. +#define declare_new_float(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, __VA_ARGS__)\
  26. +                              = (void *)checkasm_checked_call_float;
  27.  #define declare_new_emms(cpu_flags, ret, ...) \
  28.      ret (*checked_call)(void *, int, int, int, int, int, __VA_ARGS__) = \
  29.          ((cpu_flags) & av_get_cpu_flags()) ? (void *)checkasm_checked_call_emms : \
  30. @@ -126,6 +130,7 @@ void checkasm_stack_clobber(uint64_t clobber, ...);
  31.                        checked_call(func_new, 0, 0, 0, 0, 0, __VA_ARGS__))
  32.  #elif ARCH_X86_32
  33.  #define declare_new(ret, ...) ret (*checked_call)(void *, __VA_ARGS__) = (void *)checkasm_checked_call;
  34. +#define declare_new_float(ret, ...) ret (*checked_call)(void *, __VA_ARGS__) = (void *)checkasm_checked_call_float;
  35.  #define declare_new_emms(cpu_flags, ret, ...) ret (*checked_call)(void *, __VA_ARGS__) = \
  36.          ((cpu_flags) & av_get_cpu_flags()) ? (void *)checkasm_checked_call_emms :        \
  37.                                               (void *)checkasm_checked_call;
  38. @@ -151,6 +156,7 @@ void checkasm_checked_call(void *func, ...);
  39.                        checked_call(func_new, 0, 0, 0, 0, 0, 0, 0, __VA_ARGS__))
  40.  #else
  41.  #define declare_new(ret, ...)
  42. +#define declare_new_float(ret, ...)
  43.  #define declare_new_emms(cpu_flags, ret, ...)
  44.  /* Call the function */
  45.  #define call_new(...) ((func_type *)func_new)(__VA_ARGS__)
  46. @@ -159,6 +165,9 @@ void checkasm_checked_call(void *func, ...);
  47.  #ifndef declare_new_emms
  48.  #define declare_new_emms(cpu_flags, ret, ...) declare_new(ret, __VA_ARGS__)
  49.  #endif
  50. +#ifndef declare_new_float
  51. +#define declare_new_float(ret, ...) declare_new(ret, __VA_ARGS__)
  52. +#endif
  53.  
  54.  /* Benchmark the function */
  55.  #ifdef AV_READ_TIME
  56. diff --git a/tests/checkasm/x86/checkasm.asm b/tests/checkasm/x86/checkasm.asm
  57. index d12333b308..683aae80e3 100644
  58. --- a/tests/checkasm/x86/checkasm.asm
  59. +++ b/tests/checkasm/x86/checkasm.asm
  60. @@ -169,15 +169,15 @@ cglobal checked_call%1, 2,15,16,max_args*8+8
  61.      jz .clobber_ok
  62.      report_fail error_message
  63.  .clobber_ok:
  64. -%ifnid %1, _emms
  65. +%ifidn %1, _emms
  66. +    emms
  67. +%elifnidn %1, _float
  68.      fstenv [rsp]
  69.      cmp  word [rsp + 8], 0xffff
  70.      je   .emms_ok
  71.      report_fail error_message_emms
  72.      emms
  73.  .emms_ok:
  74. -%else
  75. -    emms
  76.  %endif
  77.      RET
  78.  %endmacro
  79. @@ -223,15 +223,15 @@ cglobal checked_call%1, 1,7
  80.      jz .clobber_ok
  81.      report_fail error_message
  82.  .clobber_ok:
  83. -%ifnid %1, _emms
  84. +%ifidn %1, _emms
  85. +    emms
  86. +%elifnidn %1, _float
  87.      fstenv [esp]
  88.      cmp  word [esp + 8], 0xffff
  89.      je   .emms_ok
  90.      report_fail error_message_emms
  91.      emms
  92.  .emms_ok:
  93. -%else
  94. -    emms
  95.  %endif
  96.      add  esp, max_args*4
  97.      REP_RET
  98. @@ -241,3 +241,4 @@ cglobal checked_call%1, 1,7
  99.  
  100.  CHECKED_CALL
  101.  CHECKED_CALL _emms
  102. +CHECKED_CALL _float
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement