diff options
author | Sverker Eriksson <[email protected]> | 2017-11-03 16:17:53 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2017-11-03 16:17:53 +0100 |
commit | a8264b52677abba29505a8bb597e2aaf6d3258d9 (patch) | |
tree | 64d2ebb3981ad0ead8ee65a8990df09e3718b76c /erts/emulator/hipe/hipe_amd64_bifs.m4 | |
parent | 3f09864488e77655c9bcb5c70a9b4aead46b3a36 (diff) | |
parent | 5369e34a892bfd8ab5aa98df330e3bbf19497b71 (diff) | |
download | otp-a8264b52677abba29505a8bb597e2aaf6d3258d9.tar.gz otp-a8264b52677abba29505a8bb597e2aaf6d3258d9.tar.bz2 otp-a8264b52677abba29505a8bb597e2aaf6d3258d9.zip |
Merge PR-1607 from sverker/hipe_bin_utf32_bug OTP-14740
Fix hipe bug in binary <<X/utf32>> construction
Diffstat (limited to 'erts/emulator/hipe/hipe_amd64_bifs.m4')
-rw-r--r-- | erts/emulator/hipe/hipe_amd64_bifs.m4 | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/erts/emulator/hipe/hipe_amd64_bifs.m4 b/erts/emulator/hipe/hipe_amd64_bifs.m4 index dca3887564..aff10f1528 100644 --- a/erts/emulator/hipe/hipe_amd64_bifs.m4 +++ b/erts/emulator/hipe/hipe_amd64_bifs.m4 @@ -463,6 +463,43 @@ ASYM($1): #endif') /* + * nogc_bif_interface_1(nbif_name, cbif_name) + * + * Generate native interface for a bif with implicit P + * The bif can fail but cannot do GC. + */ + +define(nogc_bif_interface_1, +` +#ifndef HAVE_$1 +#`define' HAVE_$1 + TEXT + .align 4 + GLOBAL(ASYM($1)) +ASYM($1): + /* set up the parameters */ + movq P, %rdi + NBIF_ARG(%rsi,1,0) + + /* make the call on the C stack */ + SWITCH_ERLANG_TO_C + pushq %rsi + movq %rsp, %rsi /* Eterm* BIF__ARGS */ + sub $(8), %rsp /* stack frame 16-byte alignment */ + CALL_BIF($2) + add $(1*8 + 8), %rsp + SWITCH_C_TO_ERLANG + + /* throw exception if failure, otherwise return */ + TEST_GOT_EXN + jz nbif_1_simple_exception + NBIF_RET(1) + SET_SIZE(ASYM($1)) + TYPE_FUNCTION(ASYM($1)) +#endif') + + +/* * noproc_primop_interface_0(nbif_name, cbif_name) * noproc_primop_interface_1(nbif_name, cbif_name) * noproc_primop_interface_2(nbif_name, cbif_name) |