[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