summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index 5dc34960..b4b2d7de 100644
--- a/eval.c
+++ b/eval.c
@@ -2696,9 +2696,24 @@ static val op_prof(val form, val env)
alloc_bytes_t start_mlbytes = malloc_bytes;
alloc_bytes_t start_gcbytes = gc_bytes;
val result = eval_progn(rest(form), env, form);
+ alloc_bytes_t delta_mlbytes = malloc_bytes - start_mlbytes;
+ alloc_bytes_t delta_gcbytes = gc_bytes - start_gcbytes;
+#if SIZEOF_ALLOC_BYTES_T > SIZEOF_PTR
+ val dmb = if3(delta_mlbytes <= (alloc_bytes_t) INT_PTR_MAX,
+ unum(delta_mlbytes),
+ logior(ash(unum(delta_mlbytes >> 32), num_fast(32)),
+ unum(delta_mlbytes & 0xFFFFFFFF)));
+ val dgc = if3(delta_gcbytes <= (alloc_bytes_t) INT_PTR_MAX,
+ unum(delta_gcbytes),
+ logior(ash(unum(delta_gcbytes >> 32), num_fast(32)),
+ unum(delta_gcbytes & 0xFFFFFFFF)));
+#else
+ val dmb = unum(delta_mlbytes);
+ val dgc = unum(delta_gcbytes);
+#endif
+
return list(result,
- num(malloc_bytes - start_mlbytes),
- num(gc_bytes - start_gcbytes),
+ dmb, dgc,
trunc(mul(num(clock() - start_time), num_fast(1000)), num_fast(CLOCKS_PER_SEC)),
nao);
}