From 8cccbba869209e62f9afbd693e12676ee34400cb Mon Sep 17 00:00:00 2001 From: felix Date: Thu, 6 Dec 2018 23:21:35 +0100 Subject: [PATCH] Replace C_u_i_zerop with inline version C_u_i_zerop2 Marks C_u_i_zerop as deprecated and removes comments indicating possible inline candidates (which do no apply). For binary compatibility, the old identifier can not be reused. --- DEPRECATED | 2 ++ c-platform.scm | 2 +- chicken.h | 11 ++++++++++- runtime.c | 19 ++++--------------- types.db | 2 +- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/DEPRECATED b/DEPRECATED index d6289cf5..f3c98bab 100644 --- a/DEPRECATED +++ b/DEPRECATED @@ -5,6 +5,8 @@ Deprecated functions and variables - ##sys#check-exact and its C implementations C_i_check_exact and C_i_check_exact_2 have been deprecated (see also #1631). +- "C_u_i_zerop" has been turned into an inline operation and is + deprecated in favor of "C_u_i_zerop2". 5.0.0 diff --git a/c-platform.scm b/c-platform.scm index bf034ff1..3c4e737f 100644 --- a/c-platform.scm +++ b/c-platform.scm @@ -650,7 +650,7 @@ (rewrite 'chicken.flonum#fpgcd 16 2 "C_a_i_flonum_gcd" #f words-per-flonum) (rewrite 'scheme#zero? 5 "C_eqp" 0 'fixnum) -(rewrite 'scheme#zero? 2 1 "C_u_i_zerop" #f) +(rewrite 'scheme#zero? 2 1 "C_u_i_zerop2" #f) (rewrite 'scheme#zero? 2 1 "C_i_zerop" #t) (rewrite 'scheme#positive? 5 "C_fixnum_greaterp" 0 'fixnum) (rewrite 'scheme#positive? 5 "C_flonum_greaterp" 0 'flonum) diff --git a/chicken.h b/chicken.h index 72d5d397..dbf6f17b 100644 --- a/chicken.h +++ b/chicken.h @@ -1946,7 +1946,7 @@ C_fctexport C_word C_fcall C_i_nanp(C_word x) C_regparm; C_fctexport C_word C_fcall C_i_finitep(C_word x) C_regparm; C_fctexport C_word C_fcall C_i_infinitep(C_word x) C_regparm; C_fctexport C_word C_fcall C_i_zerop(C_word x) C_regparm; -C_fctexport C_word C_fcall C_u_i_zerop(C_word x) C_regparm; +C_fctexport C_word C_fcall C_u_i_zerop(C_word x) C_regparm; /* DEPRECATED */ C_fctexport C_word C_fcall C_i_positivep(C_word x) C_regparm; C_fctexport C_word C_fcall C_i_integer_positivep(C_word x) C_regparm; C_fctexport C_word C_fcall C_i_negativep(C_word x) C_regparm; @@ -2217,6 +2217,15 @@ inline static C_word C_flonum(C_word **ptr, double n) } +inline static C_word C_fcall C_u_i_zerop2(C_word x) +{ + return C_mk_bool(x == C_fix(0) || + (!C_immediatep(x) && + C_block_header(x) == C_FLONUM_TAG && + C_flonum_magnitude(x) == 0.0)); +} + + inline static C_word C_string_to_pbytevector(C_word s) { return C_pbytevector(C_header_size(s), (C_char *)C_data_pointer(s)); diff --git a/runtime.c b/runtime.c index 5e1bb9f1..8a3d3d31 100644 --- a/runtime.c +++ b/runtime.c @@ -5491,7 +5491,7 @@ C_regparm C_word C_fcall C_i_zerop(C_word x) } } -/* I */ +/* DEPRECATED */ C_regparm C_word C_fcall C_u_i_zerop(C_word x) { return C_mk_bool(x == C_fix(0) || @@ -7050,7 +7050,6 @@ C_s_a_i_arithmetic_shift(C_word **ptr, C_word n, C_word x, C_word y) } -/* I */ C_regparm C_word C_fcall C_a_i_exp(C_word **a, int c, C_word n) { double f; @@ -7060,7 +7059,6 @@ C_regparm C_word C_fcall C_a_i_exp(C_word **a, int c, C_word n) } -/* I */ C_regparm C_word C_fcall C_a_i_log(C_word **a, int c, C_word n) { double f; @@ -7070,7 +7068,6 @@ C_regparm C_word C_fcall C_a_i_log(C_word **a, int c, C_word n) } -/* I */ C_regparm C_word C_fcall C_a_i_sin(C_word **a, int c, C_word n) { double f; @@ -7080,7 +7077,6 @@ C_regparm C_word C_fcall C_a_i_sin(C_word **a, int c, C_word n) } -/* I */ C_regparm C_word C_fcall C_a_i_cos(C_word **a, int c, C_word n) { double f; @@ -7090,7 +7086,6 @@ C_regparm C_word C_fcall C_a_i_cos(C_word **a, int c, C_word n) } -/* I */ C_regparm C_word C_fcall C_a_i_tan(C_word **a, int c, C_word n) { double f; @@ -7100,7 +7095,6 @@ C_regparm C_word C_fcall C_a_i_tan(C_word **a, int c, C_word n) } -/* I */ C_regparm C_word C_fcall C_a_i_asin(C_word **a, int c, C_word n) { double f; @@ -7110,7 +7104,6 @@ C_regparm C_word C_fcall C_a_i_asin(C_word **a, int c, C_word n) } -/* I */ C_regparm C_word C_fcall C_a_i_acos(C_word **a, int c, C_word n) { double f; @@ -7120,7 +7113,6 @@ C_regparm C_word C_fcall C_a_i_acos(C_word **a, int c, C_word n) } -/* I */ C_regparm C_word C_fcall C_a_i_atan(C_word **a, int c, C_word n) { double f; @@ -7130,7 +7122,6 @@ C_regparm C_word C_fcall C_a_i_atan(C_word **a, int c, C_word n) } -/* I */ C_regparm C_word C_fcall C_a_i_atan2(C_word **a, int c, C_word n1, C_word n2) { double f1, f2; @@ -7141,7 +7132,6 @@ C_regparm C_word C_fcall C_a_i_atan2(C_word **a, int c, C_word n1, C_word n2) } -/* I */ C_regparm C_word C_fcall C_a_i_sqrt(C_word **a, int c, C_word n) { double f; @@ -7782,7 +7772,6 @@ void C_ccall call_cc_values_wrapper(C_word c, C_word *av) } -/* I */ void C_ccall C_continuation_graft(C_word c, C_word *av) { C_word @@ -8074,7 +8063,7 @@ cplx_times(C_word **ptr, C_word rx, C_word ix, C_word ry, C_word iy) clear_buffer_object(ab, i1); clear_buffer_object(ab, i2); - if (C_truep(C_u_i_zerop(i))) return r; + if (C_truep(C_u_i_zerop2(i))) return r; else return C_cplxnum(ptr, r, i); } @@ -8569,7 +8558,7 @@ C_s_a_i_plus(C_word **ptr, C_word n, C_word x, C_word y) C_word real_sum, imag_sum; real_sum = C_s_a_i_plus(ptr, 2, C_u_i_cplxnum_real(x), C_u_i_cplxnum_real(y)); imag_sum = C_s_a_i_plus(ptr, 2, C_u_i_cplxnum_imag(x), C_u_i_cplxnum_imag(y)); - if (C_truep(C_u_i_zerop(imag_sum))) return real_sum; + if (C_truep(C_u_i_zerop2(imag_sum))) return real_sum; else return C_cplxnum(ptr, real_sum, imag_sum); } else { C_word real_sum = C_s_a_i_plus(ptr, 2, C_u_i_cplxnum_real(x), y), @@ -8780,7 +8769,7 @@ C_s_a_i_minus(C_word **ptr, C_word n, C_word x, C_word y) C_word real_diff, imag_diff; real_diff = C_s_a_i_minus(ptr,2,C_u_i_cplxnum_real(x),C_u_i_cplxnum_real(y)); imag_diff = C_s_a_i_minus(ptr,2,C_u_i_cplxnum_imag(x),C_u_i_cplxnum_imag(y)); - if (C_truep(C_u_i_zerop(imag_diff))) return real_diff; + if (C_truep(C_u_i_zerop2(imag_diff))) return real_diff; else return C_cplxnum(ptr, real_diff, imag_diff); } else { C_word real_diff = C_s_a_i_minus(ptr, 2, C_u_i_cplxnum_real(x), y), diff --git a/types.db b/types.db index 06514b28..9f882dda 100644 --- a/types.db +++ b/types.db @@ -260,7 +260,7 @@ (scheme#zero? (#(procedure #:clean #:enforce #:foldable) scheme#zero? (number) boolean) ((integer) (scheme#eq? #(1) '0)) (((or cplxnum ratnum)) (let ((#(tmp) #(1))) '#f)) - ((number) (##core#inline "C_u_i_zerop" #(1))) + ((number) (##core#inline "C_u_i_zerop2" #(1))) ((*) (##core#inline "C_i_zerop" #(1)))) (scheme#odd? (#(procedure #:clean #:enforce #:foldable) scheme#odd? (number) boolean) -- 2.19.1