[Ecls-list] Function type proclaimations not working?
Matthew Mondor
mm_lists at pulsar-zone.net
Thu May 16 22:22:56 UTC 2013
On Thu, 16 May 2013 15:09:59 -0700
Jason Sewall <jasonsewall at gmail.com> wrote:
> P.S. Here's the C file (or the first part of it, anyway) if I add the
> optimize directive to the above:
Would it be possible to indicate what you expect different below?
> /* Compiler: ECL 13.4.1 */
> /* Date: 2013/5/16 16:00 (yyyy/mm/dd) */
> /* Machine: Linux 3.8.7-201.fc18.x86_64 x86_64 */
> /* Source: var.lisp */
> #include <ecl/ecl-cmp.h>
> #include "var.eclh"
> /* function definition for TAK */
> /* optimize speed 3, debug 0, space 0, safety 0 */
> static cl_object L1tak(cl_object v1x, cl_object v2y, cl_object v3z)
> {
> cl_object T0;
> const cl_env_ptr cl_env_copy = ecl_process_env();
> cl_object value0;
> cl_fixnum v4x;
> cl_fixnum v5y;
> cl_fixnum v6z;
> v4x = ecl_fixnum(v1x);
> v5y = ecl_fixnum(v2y);
> v6z = ecl_fixnum(v3z);
> TTL:
> if ((v5y)<(v4x)) { goto L1; }
> value0 = ecl_make_fixnum(v6z);
> cl_env_copy->nvalues = 1;
> return value0;
> L1:;
> {
> cl_fixnum v7;
> T0 = ecl_make_integer((v4x)-1);
> v7 = ecl_fixnum(L1tak(T0, ecl_make_fixnum(v5y), ecl_make_fixnum(v6z)));
> {
> cl_fixnum v8;
> T0 = ecl_make_integer((v5y)-1);
> v8 = ecl_fixnum(L1tak(T0, ecl_make_fixnum(v6z), ecl_make_fixnum(v4x)));
> T0 = ecl_make_integer((v6z)-1);
> v6z = ecl_fixnum(L1tak(T0, ecl_make_fixnum(v4x), ecl_make_fixnum(v5y)));
> v5y = v8;
> v4x = v7;
> }
> }
> goto TTL;
> }
Above I can see inline use of < rather than a generic comparison
function call, as well as inline use of -1 instead of a generic
substraction function call, along with the required conversions to
fixnum...
Thanks,
--
Matt
More information about the ecl-devel
mailing list