Skip to content

Commit 136a972

Browse files
committed
Update IR
IR commit: 0108cdf808d1e7dd6b702738949e095151f49040
1 parent b8ff8c0 commit 136a972

File tree

5 files changed

+2025
-1993
lines changed

5 files changed

+2025
-1993
lines changed

ext/opcache/jit/ir/ir.c

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
# if defined(__linux__) || defined(__sun)
2424
# include <alloca.h>
2525
# endif
26+
# if defined(__APPLE__) && defined(__aarch64__)
27+
# include <libkern/OSCacheControl.h>
28+
# endif
2629
#else
2730
# define WIN32_LEAN_AND_MEAN
2831
# include <windows.h>
@@ -109,6 +112,8 @@ static void ir_print_escaped_str(const char *s, size_t len, FILE *f)
109112

110113
void ir_print_const(const ir_ctx *ctx, const ir_insn *insn, FILE *f, bool quoted)
111114
{
115+
char buf[128];
116+
112117
if (insn->op == IR_FUNC || insn->op == IR_SYM) {
113118
fprintf(f, "%s", ir_get_str(ctx, insn->val.name));
114119
return;
@@ -182,14 +187,28 @@ void ir_print_const(const ir_ctx *ctx, const ir_insn *insn, FILE *f, bool quoted
182187
if (isnan(insn->val.d)) {
183188
fprintf(f, "nan");
184189
} else {
185-
fprintf(f, "%g", insn->val.d);
190+
sprintf(buf, "%g", insn->val.d);
191+
if (strtod(buf, NULL) != insn->val.d) {
192+
sprintf(buf, "%.53e", insn->val.d);
193+
if (strtod(buf, NULL) != insn->val.d) {
194+
IR_ASSERT(0 && "can't format double");
195+
}
196+
}
197+
fprintf(f, "%s", buf);
186198
}
187199
break;
188200
case IR_FLOAT:
189201
if (isnan(insn->val.f)) {
190202
fprintf(f, "nan");
191203
} else {
192-
fprintf(f, "%g", insn->val.f);
204+
sprintf(buf, "%g", insn->val.f);
205+
if (strtod(buf, NULL) != insn->val.f) {
206+
sprintf(buf, "%.24e", insn->val.f);
207+
if (strtod(buf, NULL) != insn->val.f) {
208+
IR_ASSERT(0 && "can't format float");
209+
}
210+
}
211+
fprintf(f, "%s", buf);
193212
}
194213
break;
195214
default:
@@ -1556,7 +1575,11 @@ int ir_mem_flush(void *ptr, size_t size)
15561575
#else
15571576
void *ir_mem_mmap(size_t size)
15581577
{
1559-
void *ret = mmap(NULL, size, PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
1578+
int prot_flags = PROT_EXEC;
1579+
#if defined(__NetBSD__)
1580+
prot_flags |= PROT_MPROTECT(PROT_READ|PROT_WRITE);
1581+
#endif
1582+
void *ret = mmap(NULL, size, prot_flags, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
15601583
if (ret == MAP_FAILED) {
15611584
ret = NULL;
15621585
}
@@ -1596,6 +1619,9 @@ int ir_mem_flush(void *ptr, size_t size)
15961619
#if ((defined(__GNUC__) && ZEND_GCC_VERSION >= 4003) || __has_builtin(__builtin___clear_cache))
15971620
__builtin___clear_cache((char*)(ptr), (char*)(ptr) + size);
15981621
#endif
1622+
#if defined(__APPLE__) && defined(__aarch64__)
1623+
sys_icache_invalidate(ptr, size);
1624+
#endif
15991625
#ifdef HAVE_VALGRIND
16001626
VALGRIND_DISCARD_TRANSLATIONS(ptr, size);
16011627
#endif

0 commit comments

Comments
 (0)