-- This file has been created by using cpp on CONFIG.proto
-- in this directory and by using many variables defined
-- in the top level Makefile. Please do not edit it




-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------

-- Cofiguration File for the Sather Compiler Version 1.1
-- some options for the compiler (see the runtime spec
-- for a detailed description of them).


PLATFORMS: unix;
DEFAULT_PLATFORM: freebsd;
DISTRIBUTED: false;
THREADS: false;
ZONES: false;
TRACE: false;
LIBRARY: "SATHER_LIBRARY","Library/Library.module";
VERSION: "1.2.1";
C_COMPILER: "cc ";
CC_OPTIONS: "-I/usr/local/include";
GC_LINK: "-lgc -L/usr/local/lib";
LINK_OPTIONS: "-lm";
MAKE_COMMAND: "gmake";
OBJECT_EXT: ".o";
LIB_EXT: ".a";
C_EXT: ".c";
SHELL_SEP: "; ";
EXEC_OPTION: "-o ";
NULL_SEGFAULTS: false;
SEPARATE_POINTERS: false;
PSATHER_FLAG: "","";
CC_DEBUG_FLAG: "","-g";
CC_OPTIMIZE_FLAG: "","-O -pipe -mcpu=pentiumpro";
CC_PROLIX_FLAG: "",""; -- passed to the C compiler (prolix implies verbose)
MAKE_VERBOSE_FLAG: "-s","-s"; -- passed to make

FORTRAN_APPEND_UNDERSCORE: "true";
FORTRAN_PREFIX_UNDERSCORE: "false";
FORTRAN_BIND_FUNC: "true";

-- Define here all classes if their assignment is guaranteed to
-- be atomic (by the underlying Compiler/Hardware). Those classes may NOT
-- have a reference object as attribute, but the list is not restricted
-- to builtin classes. If you add a class here that is not atomic,
-- you will get very hard to trace bugs, and if you forget to add
-- some classes, your program runs slower. Note that you should not
-- try to add classes by trial and error, as an error may show up
-- only much too late.
ATOMIC_CLASSES: "INT","CHAR","FLT","FLTD","BOOL","CPX","PREFETCH","THREAD_ID", "F_INTEGER", "F_REAL", "F_CHARACTER", "F_LOGICAL", "F_DOUBLE", "F_COMPLEX", "C_CHAR", "C_UNSIGNED_CHAR", "C_SIGNED_CHAR", "C_SHORT", "C_INT", "C_LONG", "C_UNSIGNED_SHORT", "C_UNSIGNED_INT", "C_UNSIGNED_LONG", "C_FLOAT", "C_DOUBLE", "C_PTR", "C_CHAR_PTR", "C_UNSIGNED_CHAR_PTR", "C_SIGNED_CHAR_PTR", "C_SHORT_PTR", "C_INT_PTR", "C_LONG_PTR", "C_UNSIGNED_SHORT_PTR", "C_UNSIGNED_INT_PTR", "C_UNSIGNED_LONG_PTR", "C_FLOAT_PTR", "C_DOUBLE_PTR", "C_LONG_DOUBLE_PTR", "C_SIZE_T", "C_PTR_DIFF_T";

-- List here all classes whose layout is defined in runtime.h (or
-- some other header file)
BUILTIN_CLASSES: "$OB","INT","CHAR","BOOL","STR","FLT","FLTD",
                        "FLTX","FLTDX", "EXT_OB", "RUNTIME", "C_UNIX",
                        "THREAD_ID","PREFETCH","LL_LOCK","SPINLOCK","SEMA", "ZONE",

                        "F_INTEGER", "F_REAL", "F_CHARACTER", "F_LOGICAL",
                        "F_DOUBLE", "F_COMPLEX", "F_DOUBLE_COMPLEX",
                        "F_STRING", "F_HANDLER",

                        "F_ARRAY{F_INTEGER}", "F_ARRAY{F_REAL}",
                        "F_ARRAY{F_CHARACTER}", "F_ARRAY{F_LOGICAL}",
                        "F_ARRAY{F_DOUBLE}", "F_ARRAY{F_COMPLEX}",
                        "F_ARRAY{F_DOUBLE_COMPLEX}",

                        "F_ARRAY2{F_INTEGER}", "F_ARRAY2{F_REAL}",
                        "F_ARRAY2{F_CHARACTER}", "F_ARRAY2{F_LOGICAL}",
                        "F_ARRAY2{F_DOUBLE}", "F_ARRAY2{F_COMPLEX}",
                        "F_ARRAY2{F_DOUBLE_COMPLEX}",

                        "F_ARRAY3{F_INTEGER}", "F_ARRAY3{F_REAL}",
                        "F_ARRAY3{F_CHARACTER}", "F_ARRAY3{F_LOGICAL}",
                        "F_ARRAY3{F_DOUBLE}", "F_ARRAY3{F_COMPLEX}",
                        "F_ARRAY3{F_DOUBLE_COMPLEX}",

                        C_CHAR, C_UNSIGNED_CHAR, C_SIGNED_CHAR, C_SHORT,
                        C_INT, C_LONG, C_UNSIGNED_SHORT, C_UNSIGNED_INT,
                        C_UNSIGNED_LONG, C_FLOAT, C_DOUBLE, C_LONG_DOUBLE,
                        C_PTR, C_CHAR_PTR, C_UNSIGNED_CHAR_PTR,
                        C_SIGNED_CHAR_PTR, C_SHORT_PTR, C_INT_PTR, C_LONG_PTR,
                        C_UNSIGNED_SHORT_PTR, C_UNSIGNED_INT_PTR,
                        C_UNSIGNED_LONG_PTR, C_FLOAT_PTR, C_DOUBLE_PTR,
                        C_LONG_DOUBLE_PTR, C_SIZE_T, C_PTRDIFF_T;


-- Here you should list all the builtin classes that are reference free,
-- that is, they do not have an attribute of an abstract or reference type
REFERENCE_FREE: "INT","CHAR","BOOL","STR","FLT","FLTD",
                        "FLTX","FLTDX",
                        "F_INTEGER","F_REAL", "F_CHARACTER","F_LOGICAL",
                        "F_DOUBLE", "F_COMPLEX", "F_DOUBLE_COMPLEX",
                        "THREAD_ID","PREFETCH";

POLLING: 0;


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
AREF_ASIZE: no_pre,no_post,reads "@0::asize",
                                attr_access 1,
                                var "@r $$;",exec "$$=ASIZE(@(0)$0);" "$$",
                                f_var "@r $$;",f_exec "if(^0) $$=ASIZE(@(0)$0); else READASIZE($$,@0,$0);" "$$";
AREF_AGET: no_pre,no_post,reads "@0::[]" "@0::asize",
                                attr_access 1 0 0,
                                var "@r $$;",
                                exec "$$=@(r)ARR(@(0)$0,$1);" "$$",
                                f_exec "#if %r==0" "\tif(^0) $$=@(r)ARR(@(0)$0,$1); else F_R_RARR_NA($$,@0,$0,$1);"
                                       "#elif %r==1" "\tif(^0) $$=@(r)ARR(@(0)$0,$1); else F_VA_RARR_NA($$,@0,$0,$1);"
                                       "#elif %r==2" "\tif(^0) VASS_LP($$,@r,ARR(@(0)$0,$1)); else F_V_RARR_LP(@r,$$,@0,$0,$1);"
                                       "#endif" "$$";
AREF_ASET: no_pre,no_post,writes "@0::[]",reads "@0::asize",
                                attr_access 1 0 0,
                                exec "SARR(@(0)$0,$1,@(2)$2);",
                                f_exec "#if %2==0" "\tif(^0) SARR(@(0)$0,$1,@(2)$2); else F_R_WARR_NA(@0,$0,$1,$2);"
                                       "#elif %2==1" "\tif(^0) SARR(@(0)$0,$1,@(2)$2); else F_VA_WARR_NA(@0,$0,$1,$2);"
                                       "#elif %2==2" "\tif(^0) { CHK_BOUNDS($1,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$1],@2,$2);} else F_V_WARR_LP(@0,$0,$1,@2,$2);"
                                       "#endif";
AREF_ACLEAR: no_pre,no_post,writes "@0::[],@0::asize",
                                attr_access 1, -- the implementation is about as expensive as one access in pSather
                                exec "AREFACLEAR($0);",
                                f_exec "if(^0) AREFACLEAR($0); else F_AREFACLEAR_A(@0,$0);";
AREF_ACOPY: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                attr_access 5 5,
                                exec "AREFACOPY($0,$1);",
                                f_exec "if(^0 && ^1) AREFACOPY($0,$1); else F_AREFACOPY_AA(@0,@P0,$0,$1);";
AREF_ACOPY_BEG: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                attr_access 5 0 5,
                                exec "AREFACOPYB($0,$1,$2);",
                                f_exec "if(^0 && ^2) AREFACOPYB($0,$1,$2); else F_AREFACOPYB_AA(@0,@P0,$0,$1,$2);";
AREF_ACOPY_BEG_NUM: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                attr_access 5 0 0 5,
                                exec "AREFACOPYBN($0,$1,$2,$3);",
                                f_exec "if(^0 && ^3) AREFACOPYBN($0,$1,$2,$3); else F_AREFACOPYBN_AA(@0,@P0,$0,$1,$2,$3);";
AREF_ACOPY_BEG_NUM_SRCBEG: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                attr_access 5 0 0 0 5,
                                exec "AREFACOPYBNS($0,$1,$2,$3,$4);",
                                f_exec "if(^0 && ^4) AREFACOPYBNS($0,$1,$2,$3,$4); else F_AREFACOPYBNS_AA(@0,@P0,$0,$1,$2,$3,$4);";

AREF_AELTB: reads "@0::[]" "@0::asize",
                                attr_access 1,
                                var "INT $$br;",
                                init "$$br=ASIZE(@(0)$0);",
                                break "$$br",
                                temp "@r a$$;",
                                iter "a$$=ARR(@(0)$0,$#);" "a$$",
                                f_init "if(^0) $$br=ASIZE(@(0)$0); else $$br=F_ASIZE(@0,$0);",
                                f_iter "#if %r==0" "if(^0) a$$=ARR(@(0)$0,$#); else F_R_RARR_NA(a$$,@0,$0,$#);"
                                       "#elif %r==1" "if(^0) a$$=ARR(@(0)$0,$#); else F_VA_RARR_NA(a$$,@0,$0,$#);"
                                       "#elif %r==2" "if(^0) VASS_LP(a$$,@r,ARR(@(0)$0,$#)); else F_V_RARR_LP(@r,a$$,@0,$0,$#);"
                                       "#endif" "a$$";
AREF_AELT_BEGB: reads "@0::[]" "@0::asize",
                                attr_access 1 0,
                                var "INT $$c,$$s;",
                                temp "@r a$$;",
                                init "$$c=$1-1;$$s=ASIZE(@(0)$0);",
                                f_init "$$c=$1-1;$$s=F_ASIZE(@0,$0);",
                                iter "if(++$$c>=$$s) @@;"
                                       "a$$=ARR(@(0)$0,$$c);" "a$$",
                                f_iter "if(++$$c>=$$s) @@;"
                                       "#if %r==0" "if(^0) a$$=ARR(@(0)$0,$$c); else F_R_RARR_NA(a$$,@0,$0,$$c);"
                                       "#elif %r==1" "if(^0) a$$=ARR(@(0)$0,$$c); else F_VA_RARR_NA(a$$,@0,$0,$$c);"
                                       "#elif %r==2" "if(^0) VASS_LP(a$$,@r,ARR(@(0)$0,$#)); else F_V_RARR_LP(@r,a$$,@0,$0,$#);"
                                       "#endif" "a$$";
AREF_AELT_BEG_NUMB: reads "@0::[]" "@0::asize",
                                attr_access 1 0 0,
                                var "INT $$c,$$m;",
                                temp "@r a$$;",
                                init "$$c=$1-1;$$m=$1+$2;",
                                iter "if(++$$c>=$$m) @@;"
                                       "a$$=ARR(@(0)$0,$$c);" "a$$",
                                f_iter "if(++$$c>=$$m) @@;"
                                       "#if %r==0" "if(^0) a$$=ARR(@(0)$0,$$c); else F_R_RARR_NA(a$$,@0,$0,$$c);"
                                       "#elif %r==1" "if(^0) a$$=ARR(@(0)$0,$$c); else F_VA_RARR_NA(a$$,@0,$0,$$c);"
                                       "#elif %r==2" "if(^0) VASS_LP(a$$,@r,ARR(@(0)$0,$#)); else F_V_RARR_LP(@r,a$$,@0,$0,$#);"
                                       "#endif"
                                       "a$$";
AREF_AELT_BEG_NUM_STEPB: reads "@0::[]" "@0::asize",
                                attr_access 1 0 0 0,
                                var "INT $$c,$$m;",
                                temp "@r a$$;",
                                init "$$c=$1;$$m=$1+$2*$3;",
                                iter "if($3>=0&&$$c>=$$m||$3<0&&$$c<=$$m) @@;"
                                       "a$$=ARR(@(0)$0,$$c);" "$$c+=$3;" "a$$",
                                f_iter "if($$c>=$$m) @@;"
                                       "#if %r==0" "if(^0) a$$=ARR(@(0)$0,$$c); else F_R_RARR_NA(a$$,@0,$0,$$c);"
                                       "#elif %r==1" "if(^0) a$$=ARR(@(0)$0,$$c); else F_VA_RARR_NA(a$$,@0,$0,$$c);"
                                       "#elif %r==2" "if(^0) VASS_LP(a$$,@r,ARR(@(0)$0,$#)); else F_V_RARR_LP(@r,a$$,@0,$0,$#);"
                                       "#endif" "$$c+=$3;" "a$$";
AREF_ASETB: writes "@0::[]",
                                attr_access 1,
                                reads "@0::asize",
                                var "INT $$br;",
                                init "$$br=ASIZE(@(0)$0);",
                                f_init "$$br=F_ASIZE(@0,$0);",
                                break "$$br",
                                iter "SARR(@(0)$0,$#,@(1)$1);",
                                f_iter "#if %1==0" "if(^0) SARR(@(0)$0,$#,@(1)$1); else F_R_WARR_NA(@0,$0,$#,$1);"
                                       "#elif %1==1" "if(^0) SARR(@(0)$0,$#,@(1)$1); else F_VA_WARR_NA(@0,$0,$#,$1);"
                                       "#elif %1==2" "if(^0) { CHK_BOUNDS($#,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$#],@1,$1);} else F_V_WARR_LP(@0,$0,$#,@1,$1);"
                                       "#endif";
AREF_ASET_BEGB: writes "@0::[]",
                                reads "@0::asize",
                                attr_access 1 0,
                                var "INT $$c,$$s;",
                                init "$$c=$1-1;$$s=ASIZE(@(0)$0);",
                                f_init "$$c=$1-1;$$s=F_ASIZE(@0,$0);",
                                iter "if(++$$c>=$$s) @@;"
                                       "SARR(@(0)$0,$$c,@(2)$2);",
                                f_iter "if(++$$c>=$$s) @@;"
                                       "#if %2==0" "if(^0) SARR(@(0)$0,$$c,@(2)$2); else F_R_WARR_NA(@0,$0,$$c,$2);"
                                       "#elif %2==1" "if(^0) SARR(@(0)$0,$$c,@(2)$2); else F_VA_WARR_NA(@0,$0,$$c,$2);"
                                       "#elif %2==2" "if(^0) { CHK_BOUNDS($$c,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$$c],@2,$2);} else F_V_WARR_LP(@0,$0,$$c,@2,$2);"
                                       "#endif";
AREF_ASET_BEG_NUMB: writes "@0::[]",
                                reads "@0::asize",
                                attr_access 1 0 0,
                                var "INT $$c,$$m;",
                                init "$$c=$1-1;$$m=$1+$2;",
                                iter "if(++$$c>=$$m) @@;"
                                       "SARR(@(0)$0,$$c,@(3)$3);",
                                f_iter "if(++$$c>=$$m) @@;"
                                       "#if %3==0" "if(^0) SARR(@(0)$0,$$c,@(1)$3); else F_R_WARR_NA(@0,$0,$$c,$3);"
                                       "#elif %3==1" "if(^0) SARR(@(0)$0,$$c,@(1)$3); else F_VA_WARR_NA(@0,$0,$$c,$3);"
                                       "#elif %3==2" "if(^0) { CHK_BOUNDS($$c,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$$c],@3,$3);} else F_V_WARR_LP(@0,$0,$$c,@3,$3);"
                                       "#endif";
AREF_ASET_BEG_NUM_STEPB: reads "@0::[]",
                                writes "@0::asize",
                                attr_access 1 0 0 0,
                                var "INT $$c,$$m;",
                                init "$$c=$1;$$m=$1+$2*$3;",
                                iter "if($$c>=$$m) @@;"
                                       "SARR(@(0)$0,$$c,@(4)$4);" "$$c+=$3;",
                                f_iter "if($$c>=$$m) @@;"
                                       "#if %4==0" "if(^0) SARR(@(0)$0,$$c,@(1)$4); else F_R_WARR_NA(@0,$0,$$c,$4);"
                                       "#elif %4==1" "if(^0) SARR(@(0)$0,$$c,@(1)$4); else F_VA_WARR_NA(@0,$0,$$c,$4);"
                                       "#elif %4==2" "if(^0) { CHK_BOUNDS($$c,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$$c],@4,$4);} else F_V_WARR_LP(@0,$0,$$c,@4,$4);"
                                       "#endif" "$$c+=$3;";
AREF_AINDB: reads "@0::asize",
                                attr_access 0,
                                var "INT $$br;",
                                init "$$br=ASIZE(@(0)$0);",
                                f_init "if(^0) $$br=ASIZE(@(0)$0); else $$br=F_ASIZE(@0,$0);",
                                break "$$br",
                                temp "@r r$$;",
                                iter "r$$=$#;" "r$$";

AREF_ARRAY_PTR: exec "(void *)$0->arr_part";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------




-- THIS FILE IS WRONG FOR pSather and VALUE TYPES!







AVAL_ASIZE: no_pre,no_post,reads "@0::asize",
                                var "@r $$;",exec "$$=VASIZE(@0);" "$$";
AVAL_AGET: no_pre,no_post,reads "@0::[]" "@0::asize",
                                var "@r $$;",
                                exec "$$=@(r)VARR(@0,$0,$1);" "$$";
AVAL_ASET: no_pre,no_post,writes "@0::[]",reads "@0::asize",
                                var "@r $$;",
                                exec "$$=$0;VSARR(@0,$$,$1,@(2)$2);" "$$";
AVAL_ACOPY: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                var "@r $$;",
                                exec "$$=$0;AVALACOPY(@0,$$,$1);" "$$";
AVAL_ACOPY_BEG: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                var "@r $$;",
                                exec "$$=$0;AVALACOPYB(@0,$$,$1,$2);" "$$";
AVAL_ACOPY_BEG_NUM: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                var "@r $$;",
                                exec "$$=$0;AVALACOPYBN(@0,$$,$1,$2,$3);" "$$";
AVAL_ACOPY_BEG_NUM_SRCBEG: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                var "@r $$;",
                                exec "$$=$0;AVALACOPYBNS(@0,$$,$1,$2,$3,$4);" "$$";

AVAL_AELTB: reads "@0::[]" "@0::asize",
                                var "INT $$br;",
                                init "$$br=VASIZE(@0);",
                                break "$$br",
                                temp "@r a$$;",
                                iter "a$$=VARR(@0,$0,$#);" "a$$";
AVAL_AELT_BEGB: reads "@0::[]" "@0::asize",
                                var "INT $$c,$$s;",
                                temp "@r a$$;",
                                init "$$c=$1-1;$$s=VASIZE(@0);",
                                iter "if(++$$c>=$$s) @@;"
                                     "a$$=VARR(@0,$0,$$c);" "a$$";
AVAL_AELT_BEG_NUMB: reads "@0::[]" "@0::asize",
                                var "INT $$c,$$m;",
                                temp "@r a$$;",
                                init "$$c=$1-1;$$m=$1+$2;",
                                iter "if(++$$c>=$$m) @@;"
                                     "a$$=VARR(@0,$0,$$c);" "a$$";
AVAL_AELT_BEG_NUM_STEPB: reads "@0::[]" "@0::asize",
                                var "INT $$c,$$m;",
                                temp "@r a$$;",
                                init "$$c=$1;$$m=$1+$2*$3;",
                                iter "if($3>=0&&$$c>=$$m||$3<0&&$$c<=$$m) @@;"
                                     "a$$=VARR(@0,$0,$$c);" "$$c+=$3;" "a$$";
AVAL_AINDB: reads "@0::asize",
                                var "INT $$br;",
                                init "$$br=VASIZE(@0);",
                                break "$$br",
                                temp "@r r$$;",
                                iter "r$$=$#;" "r$$";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
BOOL_NOT: no_pre,no_post,var "@r $$;",exec "$$=!($0);" "$$";
BOOL_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=$0==$1;" "$$";
BOOL_INT: no_pre,no_post,var "@r $$;",exec "$$=(INT)$0;" "$$";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
CHAR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=$0==$1;" "$$";
CHAR_INT: no_pre,no_post,var "@r $$;",exec "$$=(INT)((unsigned char)$0);" "$$";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- the following definitions assume that all floating point
-- operations return NaN if used with wrong arguments (a la IEEE)
-- If this is not the case for some machines, all functions that
-- could break should get a 'fragile'
FLT_PLUS: no_pre,no_post,var "@r $$;",exec "$$=$0+$1;" "$$";
FLT_MINUS: no_pre,no_post,var "@r $$;",exec "$$=$0-$1;" "$$";
FLT_NEGATE: no_pre,no_post,var "@r $$;",exec "$$= -$0;" "$$";
FLT_TIMES: no_pre,no_post,var "@r $$;",exec "$$=$0*$1;" "$$";
FLT_DIV: no_pre,no_post,var "@r $$;",exec "$$=FLTDIV($0,$1);" "$$";
FLT_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=($0)==($1);" "$$";
FLT_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=($0)<($1);" "$$";
IR_ISNORMAL: no_pre,no_post,var "@r $$;",declare "_FM_B_F(isnormal)",exec "$$=ir_isnormal($0);" "$$";
IR_ISSUBNORMAL: no_pre,no_post,var "@r $$;",declare "_FM_B_F(issubnormal)",exec "$$=ir_issubnormal($0);" "$$";
IR_ISZERO: no_pre,no_post,var "@r $$;",declare "_FM_B_F(iszero)",exec "$$=ir_iszero($0);" "$$";
IR_SIGNBIT: no_pre,no_post,var "@r $$;",declare "_FM_B_F(signbit)",exec "$$=ir_signbit($0);" "$$";
IR_ILOGB: no_pre,no_post,var "@r $$;",declare "_FM_I_F(ilogb)",exec "$$=ir_ilogb($0);" "$$";
R_COPYSIGN: no_pre,no_post,var "@r $$;",declare "_FM_F_F(copysign)",exec "$$=r_copysign($0,$1);" "$$";
R_NEXTUP: no_pre,no_post,var "@r $$;",declare "_FM_F_FF(nextafter)",exec "$$=r_nextafter($0,1.0);" "$$";
R_NEXTDOWN: no_pre,no_post,var "@r $$;",declare "_FM_F_FF(nextafter)",exec "$$=r_nextafter($0,-1.0);" "$$";
R_REMAINDER: no_pre,no_post,var "@r $$;",declare "_FM_F_F(remainder)",exec "$$=r_remainder($0,$1);" "$$";
R_FMOD: no_pre,no_post,var "@r $$;",declare "_FM_F_FF(fmod)",exec "$$=r_fmod($0,$1);" "$$";
R_SCALBN: no_pre,no_post,var "@r $$;",declare "_FM_F_FI(scalbn)",exec "$$=r_scalbn($0,$1);" "$$";
R_J0: no_pre,no_post,var "@r $$;",declare "_FM_F_F(j0)",exec "$$=r_j0($0);" "$$";
R_J1: no_pre,no_post,var "@r $$;",declare "_FM_F_F(j1)",exec "$$=r_j1($0);" "$$";
R_JN: no_pre,no_post,var "@r $$;",declare "_FM_F_IF(jn)",exec "$$=r_jn($1,$0);" "$$";
R_Y0: no_pre,no_post,var "@r $$;",declare "_FM_F_F(y0)",exec "$$=r_y0($0);" "$$";
R_Y1: no_pre,no_post,var "@r $$;",declare "_FM_F_F(y1)",exec "$$=r_y1($0);" "$$";
R_YN: no_pre,no_post,var "@r $$;",declare "_FM_F_IF(yn)",exec "$$=r_yn($1,$0);" "$$";
R_ERF: no_pre,no_post,var "@r $$;",declare "_FM_F_F(erf)",exec "$$=r_erf($0);" "$$";
R_ERFC: no_pre,no_post,var "@r $$;",declare "_FM_F_F(erfc)",exec "$$=r_erfc($0);" "$$";
R_EXP: no_pre,no_post,var "@r $$;",declare "_FM_F_F(exp)",exec "$$=r_exp($0);" "$$";
R_EXPM1: no_pre,no_post,var "@r $$;",declare "_FM_F_F(expm1)",exec "$$=r_expm1($0);" "$$";
R_EXP2: no_pre,no_post,var "@r $$;",declare "_FM_F_F(exp2)",exec "$$=r_exp2($0);" "$$";
R_EXP10: no_pre,no_post,var "@r $$;",declare "_FM_F_F(exp10)",exec "$$=r_exp10($0);" "$$";
R_LOG: no_pre,no_post,var "@r $$;",declare "_FM_F_F(log)",exec "$$=r_log($0);" "$$";
R_LOG1P: no_pre,no_post,var "@r $$;",declare "_FM_F_F(log1p)",exec "$$=r_log1p($0);" "$$";
R_LOG10: no_pre,no_post,var "@r $$;",declare "_FM_F_F(log10)",exec "$$=r_log10($0);" "$$";
R_POW: no_pre,no_post,var "@r $$;",declare "_FM_F_FF(pow)",exec "$$=r_pow($0,$1);" "$$";
R_SINH: no_pre,no_post,var "@r $$;",declare "_FM_F_F(sinh)",exec "$$=r_sinh($0);" "$$";
R_COSH: no_pre,no_post,var "@r $$;",declare "_FM_F_F(cosh)",exec "$$=r_cosh($0);" "$$";
R_TANH: no_pre,no_post,var "@r $$;",declare "_FM_F_F(tanh)",exec "$$=r_tanh($0);" "$$";
R_ASINH: no_pre,no_post,var "@r $$;",declare "_FM_F_F(asinh)",exec "$$=r_asinh($0);" "$$";
R_ACOSH: no_pre,no_post,var "@r $$;",declare "_FM_F_F(acosh)",exec "$$=r_acosh($0);" "$$";
R_ATANH: no_pre,no_post,var "@r $$;",declare "_FM_F_F(atanh)",exec "$$=r_atanh($0);" "$$";
R_HYPOT: no_pre,no_post,var "@r $$;",declare "_FM_F_FF(hypot)",exec "$$=r_hypot($0,$1);" "$$";
R_SIN: no_pre,no_post,var "@r $$;",declare "_FM_F_F(sin)",exec "$$=r_sin($0);" "$$";
R_COS: no_pre,no_post,var "@r $$;",declare "_FM_F_F(cos)",exec "$$=r_cos($0);" "$$";
SINCOS: no_pre,no_post,exec "sincos($0,&$1,&$2);";
R_TAN: no_pre,no_post,var "@r $$;",declare "_FM_F_F(tan)",exec "$$=r_tan($0);" "$$";
R_ASIN: no_pre,no_post,var "@r $$;",declare "_FM_F_F(asin)",exec "$$=r_asin($0);" "$$";
R_ACOS: no_pre,no_post,var "@r $$;",declare "_FM_F_F(acos)",exec "$$=r_acos($0);" "$$";
R_ATAN: no_pre,no_post,var "@r $$;",declare "_FM_F_F(atan)",exec "$$=r_atan($0);" "$$";
R_ATAN2: no_pre,no_post,var "@r $$;",declare "_FM_F_FF(atan2)",exec "$$=r_atan2($0,$1);" "$$";
R_SINPI: no_pre,no_post,var "@r $$;",declare "_FM_F_F(sinpi)",exec "$$=r_sinpi($0);" "$$";
R_COSPI: no_pre,no_post,var "@r $$;",declare "_FM_F_F(cospi)",exec "$$=r_cospi($0);" "$$";
SINCOSPI: no_pre,no_post,exec "sincospi($0,&$1,&$2);";
R_TANPI: no_pre,no_post,var "@r $$;",declare "_FM_F_F(tanpi)",exec "$$=r_tanpi($0);" "$$";
R_ASINPI: no_pre,no_post,var "@r $$;",declare "_FM_F_F(asinpi)",exec "$$=r_asinpi($0);" "$$";
R_ACOSPI: no_pre,no_post,var "@r $$;",declare "_FM_F_F(acospi)",exec "$$=r_acospi($0);" "$$";
R_ATANPI: no_pre,no_post,var "@r $$;",declare "_FM_F_F(atanpi)",exec "$$=r_atanpi($0);" "$$";
R_ATAN2PI: no_pre,no_post,var "@r $$;",declare "_FM_F_FF(atan2pi)",exec "$$=r_atan2pi($0,$1);" "$$";
R_FABS: no_pre,no_post,var "@r $$;",declare "_FM_F_F(fabs)",exec "$$=r_fabs($0);" "$$";
R_LGAMMA: no_pre,no_post,var "@r $$;",declare "_FM_F_F(lgamma)",exec "$$=r_lgamma($0);" "$$";
R_SQRT: no_pre,no_post,var "@r $$;",declare "_FM_F_F(sqrt)",exec "$$=r_sqrt($0);" "$$";
R_CBRT: no_pre,no_post,var "@r $$;",declare "_FM_F_F(cbrt)",exec "$$=r_cbrt($0);" "$$";
ATOF: no_pre,no_post,var "@r $$;",exec "$$=atof($1->arr_part);" "$$";
FLT_INT: no_pre,no_post,var "@r $$;",exec "$$=FLTINT($0);" "$$";
FLT_FLTD: no_pre,no_post,var "@r $$;",exec "$$=(@r)$0;" "$$";
FLT_FLTX: no_pre,no_post,var "@r $$;",exec "$$=(@r)$0;" "$$";
FLT_FLTDX: no_pre,no_post,var "@r $$;",exec "$$=(@r)$0;" "$$";
FLT_TRUNCATE: no_pre,no_post,var "@r $$;",exec "$$=FLTTRUNCATE($0);" "$$";
R_FLOOR: no_pre,no_post,var "@r $$;",declare "_FM_F_F(floor)",exec "$$=r_floor($0);" "$$";
R_CEIL: no_pre,no_post,var "@r $$;",declare "_FM_F_F(ceil)",exec "$$=r_ceil($0);" "$$";
FLT_ROUND: no_pre,no_post,var "@r $$;",exec "$$=FLTROUND($0);" "$$";
R_SIGNALING_NAN:no_pre,no_post,var "@r $$;",declare "_FM_F_I(signaling_nan)",exec "$$=r_signaling_nan($1);" "$$";
R_QUIET_NAN: no_pre,no_post,var "@r $$;",declare "_FM_F_I(quiet_nan)",exec "$$=r_quiet_nan($1);" "$$";
R_INFINITY: no_pre,no_post,var "@r $$;",declare "_FM_F(infinity)",exec "$$=r_infinity();" "$$";
MIN_NORMAL: no_pre,no_post,var "@r $$;",exec "$$=FLTMINNORMAL;" "$$";
MAX_NORMAL: no_pre,no_post,var "@r $$;",exec "$$=FLTMAXNORMAL;" "$$";
MIN_SUBNORMAL: no_pre,no_post,var "@r $$;",exec "$$=FLTMINSUBNORMAL;" "$$";
MAX_SUBNORMAL: no_pre,no_post,var "@r $$;",exec "$$=FLTMAXSUBNORMAL;" "$$";
FLT_STORE_INTO: volatile,no_pre,no_post,var "@r $$;",exec "$$=FLTSTORE($0,$1);" "$$";
FLT_STORE_PREC: volatile,no_pre,no_post,var "@r $$;",exec "$$=FLTSTOREPREC($0,$1,$2);" "$$";
FLT_GET_REP: no_pre,no_post,exec "rt_flt_get_rep($0,$1,$2,$3);";


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- the following definitions assume that all floating point
-- operations return NaN if used with wrong arguments (a la IEEE)
-- If this is not the case for some machines, all functions that
-- could break should get a 'fragile'

FLTD_PLUS: no_pre,no_post,var "@r $$;",exec "$$=$0+$1;" "$$";
FLTD_MINUS: no_pre,no_post,var "@r $$;",exec "$$=$0-$1;" "$$";
FLTD_NEGATE: no_pre,no_post,var "@r $$;",exec "$$= -$0;" "$$";
FLTD_TIMES: no_pre,no_post,var "@r $$;",exec "$$=$0*$1;" "$$";
FLTD_DIV: no_pre,no_post,var "@r $$;",exec "$$=FLTDIV($0,$1);" "$$";
FLTD_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=($0)==($1);" "$$";
FLTD_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=($0)<($1);" "$$";
FLTD_FINITE: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=finite($0)!=0;" "$$";
FLTD_ISINF: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=isinf($0)!=0;" "$$";
FLTD_ISNORMAL: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=isnormal($0)!=0;" "$$";
FLTD_ISSUBNORMAL: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=issubnormal($0)!=0;" "$$";
FLTD_ISZERO: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=iszero($0)!=0;" "$$";
FLTD_SIGNBIT: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=signbit($0);" "$$";
FLTD_ILOGB: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=ilogb($0);" "$$";
FLTD_COPYSIGN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=copysign($0);" "$$";
FLTD_NEXTUP: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=nextafter($0,1.0d);" "$$";
FLTD_NEXTDOWN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=nextafter($0,-1.0d);" "$$";
FLTD_REMAINDER: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=remainder($0);" "$$";
FLTD_FMOD: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=fmod($0);" "$$";
FLTD_SCALBN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=scalbn($0);" "$$";
FLTD_J0: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=j0($0);" "$$";
FLTD_J1: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=j1($0);" "$$";
FLTD_JN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=jn($0);" "$$";
FLTD_Y0: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=y0($0);" "$$";
FLTD_Y1: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=y1($0);" "$$";
FLTD_YN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=yn($0);" "$$";
FLTD_ERF: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=erf($0);" "$$";
FLTD_ERFC: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=erfc($0);" "$$";
FLTD_EXP: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=exp($0);" "$$";
FLTD_EXPM1: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=expm1($0);" "$$";
FLTD_EXP2: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=exp2($0);" "$$";
FLTD_EXP10: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDEXP10($0);" "$$";
FLTD_LOG: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=log($0);" "$$";
FLTD_LOG1P: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=log1p($0);" "$$";
FLTD_LOG10: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=log10($0);" "$$";
FLTD_POW: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=pow($0,$1);" "$$";
FLTD_SINH: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=sinh($0);" "$$";
FLTD_COSH: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=cosh($0);" "$$";
FLTD_TANH: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=tanh($0);" "$$";
FLTD_ASINH: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=asinh($0);" "$$";
FLTD_ACOSH: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=acosh($0);" "$$";
FLTD_ATANH: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=atanh($0);" "$$";
FLTD_HYPOT: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=hypot($0);" "$$";
FLTD_SIN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=sin($0);" "$$";
FLTD_COS: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=cos($0);" "$$";
FLTD_SINCOS: no_pre,no_post,declare "#include <math.h>",exec "sincos($0,&$1,&$2);";
FLTD_TAN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=tan($0);" "$$";
FLTD_ASIN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=asin($0);" "$$";
FLTD_ACOS: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=acos($0);" "$$";
FLTD_ATAN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=atan($0);" "$$";
FLTD_ATAN2: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=atan2($0,$1);" "$$";
FLTD_SINPI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=sinpi($0);" "$$";
FLTD_COSPI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=cospi($0);" "$$";
FLTD_SINCOSPI: no_pre,no_post,declare "#include <math.h>",exec "sincospi($0,&$1,&$2);";
FLTD_TANPI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=tanpi($0);" "$$";
FLTD_ASINPI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=asinpi($0);" "$$";
FLTD_ACOSPI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=acospi($0);" "$$";
FLTD_ATANPI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=atanpi($0);" "$$";
FLTD_ATAN2PI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=atan2pi($0,$1);" "$$";
FLTD_FABS: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=fabs($0);" "$$";
FLTD_LGAMMA: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=lgamma($0);" "$$";
FLTD_SQRT: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=sqrt($0);" "$$";
FLTD_CBRT: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=cbrt($0);" "$$";
FLTD_STORE_INTO: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDSTORE($0,$1);" "$$";
FLTD_STORE_INTO_PREC: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDSTOREPREC($0,$1,$2);" "$$";
FLTD_ATOF: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=atof($1->arr_part);" "$$";
FLTD_INT: no_pre,no_post,var "@r $$;",exec "$$=(INT)$0;" "$$";
FLTD_FLT: no_pre,no_post,var "@r $$;",exec "$$=(FLT)$0;" "$$";
FLTD_FLTX: no_pre,no_post,var "@r $$;",exec "$$=(FLTX)$0;" "$$";
FLTD_FLTDX: no_pre,no_post,var "@r $$;",exec "$$=(FLTDX)$0;" "$$";
FLTD_TRUNCATE: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDTRUNCATE($0);" "$$";
FLTD_FLOOR: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=floor($0);" "$$";
FLTD_CEIL: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=ceil($0);" "$$";
FLTD_ROUND: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDROUND($0);" "$$";
FLTD_PI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_PI;" "$$";
FLTD_E: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_E;" "$$";
FLTD_SQRT_2: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_SQRT2;" "$$";
FLTD_LOG_2: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_LOG2;" "$$";
FLTD_LOG2_E: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_LOG2E;" "$$";
FLTD_LOG10_E: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_LOG10E;" "$$";
FLTD_LOG_10: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_LN10;" "$$";
FLTD_HALF_PI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_PI_2;" "$$";
FLTD_QUARTER_PI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_PI_4;" "$$";
FLTD_INV_SQRT_2: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_SQRT1_2;" "$$";
FLTD_INV_PI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_1_PI;" "$$";
FLTD_DOUBLE_INV_PI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_2_PI;" "$$";
FLTD_DOUBLE_SQRT_PI: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=M_2_SQRTPI;" "$$";
FLTD_SIGNALING_NAN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=signaling_nan($1);" "$$";
FLTD_QUIET_NAN: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=quiet_nan($1);" "$$";
FLTD_INFINITY: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=infinity();" "$$";
FLTD_MIN_NORMAL: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDMINNORMAL;" "$$";
FLTD_MAX_NORMAL: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDMAXNORMAL;" "$$";
FLTD_MIN_SUBNORMAL: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDMINSUBNORMAL;" "$$";
FLTD_MAX_SUBNORMAL: no_pre,no_post,var "@r $$;",declare "#include <math.h>",exec "$$=FLTDMINSUBNORMAL;" "$$";
FLTD_GET_REP: no_pre,no_post,exec "rt_fltd_get_rep($0,$1,$2,$3,$4);";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
INT_PLUS: arith,no_pre,no_post,var "@r $$;",exec "$$=INTPLUS($0,$1);" "$$";
INT_MINUS: arith,no_pre,no_post,var "@r $$;",exec "$$=INTMINUS($0,$1);" "$$";
INT_NEGATE: arith,no_pre,no_post,var "@r $$;",exec "$$=INTMINUS(0,$0);" "$$";
INT_TIMES: arith,no_pre,no_post,var "@r $$;",exec "$$=INTTIMES($0,$1);" "$$";
INT_DIV: fragile,no_pre,no_post,var "@r $$;",exec "$$=INTDIV($0,$1);" "$$";
INT_MOD: fragile,no_pre,no_post,var "@r $$;",exec "$$=INTMOD($0,$1);" "$$";
INT_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=($0)==($1);" "$$";
INT_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=($0)<($1);" "$$";
INT_BOOL: no_pre,no_post,var "@r $$;",exec "$$=(BOOL)$0;" "$$";
INT_FLT: no_pre,no_post,var "@r $$;",exec "$$=(FLT)$0;" "$$";
INT_FLTD: no_pre,no_post,var "@r $$;",exec "$$=(FLTD)$0;" "$$";
INT_FLTX: no_pre,no_post,var "@r $$;",exec "$$=(FLT)$0;" "$$";
INT_FLTDX: no_pre,no_post,var "@r $$;",exec "$$=(FLT)$0;" "$$";
INT_CHAR: no_pre,no_post,var "@r $$;",exec "$$=(CHAR)$0;" "$$";
INT_C_UNSIGNED_INT: no_pre,no_post,var "@r $$;",exec "$$=(unsigned int)$0;" "$$";
INT_INT: no_pre,no_post,exec "$0";
INT_ABS: no_pre,no_post,var "@r $$;",exec "$$=($0<0)?-$0:$0;" "$$";
INT_SQUARE: arith,no_pre,no_post,var "@r $$;",exec "$$=INTTIMES($0,$0);" "$$";
INT_MAX: no_pre,no_post,var "@r $$;",exec "$$=($0>$1)?$0:$1;" "$$";
INT_MIN: no_pre,no_post,var "@r $$;",exec "$$=($0<$1)?$0:$1;" "$$";
INT_IS_EVEN: no_pre,no_post,var "@r $$;",exec "$$=($0&1)==0;" "$$";
INT_IS_ODD: no_pre,no_post,var "@r $$;",exec "$$=($0&1)!=0;" "$$";
INT_IS_BETWEEN: no_pre,no_post,var "@r $$;",exec "$$=($1<=$0&&$0<=$2)||($2<=$0&&$0<=$1);" "$$";
INT_UPLUS: arith,no_pre,no_post,var "@r $$;",exec "$$=INTUPLUS($0,$1);" "$$";
INT_UMINUS: arith,no_pre,no_post,var "@r $$;",exec "$$=INTUMINUS($0,$1);" "$$";
INT_UTIMES: arith,no_pre,no_post,var "@r $$;",exec "$$=INTUTIMES($0,$1);" "$$";
INT_UDIV: fragile,no_pre,no_post,var "@r $$;",exec "$$=INTUDIV($0,$1);" "$$";
INT_UMOD: fragile,no_pre,no_post,var "@r $$;",exec "$$=INTUMOD($0,$1);" "$$";
INT_MPLUS: no_pre,no_post,var "@r $$;",exec "$$=((unsigned)$0+(unsigned)$1);" "$$";
INT_MMINUS: no_pre,no_post,var "@r $$;",exec "$$=((unsigned)$0-(unsigned)$1);" "$$";
INT_MNEGATE: no_pre,no_post,var "@r $$;",exec "$$=(-(unsigned)$0);" "$$";
INT_MTIMES: no_pre,no_post,var "@r $$;",exec "$$=((unsigned)$0*(unsigned)$1);" "$$";
INT_MDIV: fragile,no_pre,no_post,var "@r $$;",exec "$$=((unsigned)$0/(unsigned)$1);" "$$";
INT_MMOD: fragile,no_pre,no_post,var "@r $$;",exec "$$=((unsigned)$0%%(unsigned)$1);" "$$";
INT_BNOT: no_pre,no_post,var "@r $$;",exec "$$=~$0;" "$$";
INT_BAND: no_pre,no_post,var "@r $$;",exec "$$=$0&$1;" "$$";
INT_BOR: no_pre,no_post,var "@r $$;",exec "$$=$0|$1;" "$$";
INT_BXOR: no_pre,no_post,var "@r $$;",exec "$$=$0\\^$1;" "$$";
INT_LSHIFT: no_pre,no_post,var "@r $$;",exec "$$=((unsigned)$0)<<((unsigned)$1);" "$$";
INT_RSHIFT: no_pre,no_post,var "@r $$;",exec "$$=INTRSHIFT($0,$1);" "$$";
INT_URSHIFT: no_pre,no_post,var "@r $$;",exec "$$=((unsigned)$0)>>((unsigned)$1);" "$$";
INT_CREATE_STR: fragile,no_pre,no_post,var "@r $$;",exec "$$=atoi(((STR)$1)->arr_part);" "$$";
INT_AGET: no_pre,no_post,var "@r $$;",exec "$$=((CHAR)(($0&(1<<$1))!=0));" "$$";
INT_ASET: no_pre,no_post,var "@r $$;",exec "$$=((($0)&(~(1<<($1))))|(($2)<<($1)));" "$$";
INT_MAXINT: no_pre,no_post,var "INT $$=SINT_MAX;",exec "$$";
INT_MININT: no_pre,no_post,var "INT $$=SINT_MIN;",exec "$$";
INT_TIMESB: no_pre,no_post,
                break "$0";
INT_TIMESB_INT: no_pre,no_post,
                break "$0",
                temp "@r a$$;",
                iter "a$$=$#;" "a$$";
INT_FORB: no_pre,no_post,
                var "INT $$,$$m;",
                init "$$=$0-1;$$m=$1;",
                iter "if(($$m--)<=0) @@;$$++;" "$$";
INT_UPB: no_pre,no_post,
                var "INT $$;",
                init "$$=$0-1;",
                iter "$$++;" "$$";
INT_UPTOB: no_pre,no_post,
                var "INT $$,$$m;",
                init "$$=$0-1;$$m=$1;",
                iter "if($$++>=$$m) @@;" "$$";
INT_DOWNTOB: no_pre,no_post,
                var "INT $$,$$m;",
                init "$$=$0+1;$$m=$1;",
                iter "if($$--<=$$m) @@;" "$$";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- note: all ACOPY macros are hard coded into
-- the compiler. This was needed especially for pSather to
-- achieve highest performance. However, you should not delete
-- them here, as the compiler still needs some of the information
-- in this file.
STR_ACOPY_FSTR_INT: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "STRACOPYNF($0,$1,$2);",
                                f_exec "if(^0&&^1) STRACOPYNF($0,$1,$2); else F_STRACOPYNF($0,$1,$2);";
STR_ACOPY_STR_INT: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "STRACOPYN($0,$1,$2);",
                                f_exec "if(^0&&^1) STRACOPYN($0,$1,$2); else F_STRACOPYN($0,$1,$2);";


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- note: all ACOPY macros are hard coded int
-- the compiler. This was needed especially for pSather to
-- achieve highest performance. However, you should not delete
-- them here, as the compiler still needs some of the information
-- in this file.
FSTR_ACOPY_FSTR: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "FSTRACOPYF($0,$1);",
                                f_exec "if(^0 && ^1) FSTRACOPYF($0,$1); else F_FSTRACOPYF($0,$1);";
FSTR_ACOPY_STR: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "FSTRACOPY($0,$1);",
                                f_exec "if(^0 && ^1) FSTRACOPY($0,$1); else F_FSTRACOPY($0,$1);";
FSTR_ACOPYN_FSTR_INT: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "FSTRACOPYNF($0,$1,$2);",
                                f_exec "if(^0 && ^1) FSTRACOPYNF($0,$1,$2); else F_FSTRACOPYNF($0,$1,$2);";
FSTR_ACOPYN_STR_INT: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "FSTRACOPYN($0,$1,$2);",
                                f_exec "if(^0 && ^1) FSTRACOPYN($0,$1,$2); else F_FSTRACOPYN($0,$1,$2);";
FSTR_ACOPY_INT_FSTR: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "FSTRACOPYIF($0,$1,$2);",
                                f_exec "if(^0 && ^2) FSTRACOPYIF($0,$1,$2); else F_FSTRACOPYIF($0,$1,$2);";
FSTR_ACOPY_INT_STR: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "FSTRACOPYIS($0,$1,$2);",
                                f_exec "if(^0 && ^2) FSTRACOPYIS($0,$1,$2); else F_FSTRACOPYIS($0,$1,$2);";
FSTR_MEMCMP_FSTR_INT: no_pre,no_post,reads "@0::asize" "@0::loc" "@0::[]",var "@r $$;",
                                exec "$$=STRISEQHELPER($0,$1,$2);" "$$",
                                f_exec "$$=(^0&&^1)?STRISEQHELPER($0,$1,$2):F_STRISEQHELPER(@0,$0,@1,$1,$2);" "$$";
FSTR_MEMCMP_STR_INT: no_pre,no_post,reads "@0::asize" "@0::loc" "@0::[]",var "@r $$;",
                                exec "$$=STRISEQHELPER($0,$1,$2);" "$$",
                                f_exec "$$=(^0&&^1)?STRISEQHELPER($0,$1,$2):F_STRISEQHELPER(@0,$0,@1,$1,$2);" "$$";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
ARRAY_SIZE: no_pre,no_post,reads "@0::asize",var "@r $$;",
                                exec "$$=($0)==NULL?0:ASIZE(@(0)$0);" "$$",
                                f_exec "$$=FVOID($0)?0:^0?ASIZE(@(0)$0):F_ASIZE(@0,$0);" "$$";
ARRAY_CLEAR: no_pre,no_post,writes "@0::[],@0::asize",
                                exec "if($0!=NULL) AREFACLEAR($0);",
                                f_exec "if(!FVOID($0)) { if(^0) AREFACLEAR($0); else F_AREFACLEAR_A(@0,$0); }";
ARRAY_COPY: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "if($0!=NULL && $1!=NULL) AREFACOPY($0,$1);",
                                f_exec "if(!FVOID($0) && !FVOID($1)) { if(^0 && ^1) AREFACOPY($0,$1); else F_AREFACOPY_AA(@0,@P0,$0,$1); }";
ARRAY_COPY_BEG: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "if($2!=NULL) AREFACOPYB($0,$1,$2);",
                                f_exec "if(!FVOID($2)) { if(^0 && ^1) AREFACOPYB($0,$1,$2); else F_AREFACOPYB_AA(@0,@P0,$0,$1,$2); }";
ARRAY_COPY_BEG_NUM: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "AREFACOPYBN($0,$1,$2,$3);",
                                f_exec "if(^0 && ^1) AREFACOPYBN($0,$1,$2,$3); else F_AREFACOPYBN_AA(@0,@P0,$0,$1,$2,$3);";
ARRAY_COPY_BEG_NUM_SRCBEG: no_pre,no_post,reads "@0::[]" "@0::asize",writes "@0::[]" "@0::asize",
                                exec "AREFACOPYBNS($0,$1,$2,$3,$4);",
                                f_exec "F_AREFACOPYBNS_AA(@0,@P0,$0,$1,$2,$3,$4);";

ARRAY_ELTB: reads "@0::[]" "@0::asize",
                                attr_access 1,
                                var "INT $$br;",
                                init "$$br=$0==NULL?0:ASIZE(@(0)$0);",
                                break "$$br",
                                temp "@r a$$;",
                                iter "a$$=ARR(@(0)$0,$#);" "a$$",
                                f_init "$$br=FVOID($0)?0:^0?ASIZE(@(0)$0):F_ASIZE(@0,$0);",
                                f_iter "#if %r==0" "if(^0) a$$=ARR(@(0)$0,$#); else F_R_RARR_NA(a$$,@0,$0,$#);"
                                        "#elif %r==1" "if(^0) a$$=ARR(@(0)$0,$#); else F_VA_RARR_NA(a$$,@0,$0,$#);"
                                        "#elif %r==2" "if(^0) VASS_LP(a$$,@r,ARR(@(0)$0,$#)); else F_V_RARR_LP(@r,a$$,@0,$0,$#);"
                                        "#endif"
                                        "a$$";
ARRAY_ELT_BEGB: reads "@0::[]" "@0::asize",
                                var "INT $$c,$$s;",
                                attr_access 1,
                                temp "@r a$$;",
                                init "$$c=$1-1;$$s=$0==0?0:ASIZE(@(0)$0);",
                                f_init "$$c=$1-1;$$s=FVOID($0)?0:^0?ASIZE(@(0)$0):F_ASIZE(@0,$0);",
                                iter "if(++$$c>=$$s) @@;"
                                        "a$$=ARR(@(0)$0,$$c);" "a$$",
                                f_iter "if(++$$c>=$$s) @@;"
                                        "#if %r==0" "if(^0) a$$=ARR(@(0)$0,$$c); else F_R_RARR_NA(a$$,@0,$0,$$c);"
                                        "#elif %r==1" "if(^0) a$$=ARR(@(0)$0,$$c); else F_VA_RARR_NA(a$$,@0,$0,$$c);"
                                        "#elif %r==2" "if(^0) VASS_LP(a$$,@r,ARR(@(0)$0,$#)); else F_V_RARR_LP(@r,a$$,@0,$0,$#);"
                                        "#endif"
                                        "a$$";
ARRAY_ELT_BEG_NUMB: reads "@0::[]" "@0::asize",
                                var "INT $$c,$$m;",
                                temp "@r a$$;",
                                attr_access 1,
                                init "$$c=$1-1;$$m=$1+$2;",
                                iter "if(++$$c>=$$m) @@;"
                                        "a$$=ARR(@(0)$0,$$c);" "a$$",
                                f_iter "if(++$$c>=$$m) @@;"
                                        "#if %r==0" "if(^0) a$$=ARR(@(0)$0,$$c); else F_R_RARR_NA(a$$,@0,$0,$$c);"
                                        "#elif %r==1" "if(^0) a$$=ARR(@(0)$0,$$c); else F_VA_RARR_NA(a$$,@0,$0,$$c);"
                                        "#elif %r==2" "if(^0) VASS_LP(a$$,@r,ARR(@(0)$0,$#)); else F_V_RARR_LP(@r,a$$,@0,$0,$#);"
                                        "#endif"
                                        "a$$";
ARRAY_ELT_BEG_NUM_STEPB: reads "@0::[]" "@0::asize",
                                var "INT $$c,$$m;",
                                attr_access 1,
                                temp "@r a$$;",
                                init "$$c=$1;$$m=$1+$2*$3;",
                                iter "if($3>=0&&$$c>=$$m||$3<0&&$$c<=$$m)@@;"
                                        "a$$=ARR(@(0)$0,$$c);" "$$c+=$3;" "a$$",
                                f_iter "if($$c>=$$m) @@;"
                                        "#if %r==0" "if(^0) a$$=ARR(@(0)$0,$$c); else F_R_RARR_NA(a$$,@0,$0,$$c);"
                                        "#elif %r==1" "if(^0) a$$=ARR(@(0)$0,$$c); else F_VA_RARR_NA(a$$,@0,$0,$$c);"
                                        "#elif %r==2" "if(^0) VASS_LP(a$$,@r,ARR(@(0)$0,$#)); else F_V_RARR_LP(@r,a$$,@0,$0,$#);"
                                        "#endif"
                                        "$$c+=$3;" "a$$";
ARRAY_SETB: writes "@0::[]",
                                attr_access 1,
                                reads "@0::asize",
                                var "INT $$br;",
                                init "$$br=$0==NULL?0:ASIZE(@(0)$0);",
                                f_init "$$br=FVOID($0)?0:^0?ASIZE(@(0)$0):F_ASIZE(@0,$0);",
                                break "$$br",
                                iter "SARR(@(0)$0,$#,@(1)$1);",
                                f_iter "#if %1==0" "if(^0) SARR(@(0)$0,$#,@(1)$1); else F_R_WARR_NA(@0,$0,$#,$1);"
                                        "#elif %1==1" "if(^0) SARR(@(0)$0,$#,@(1)$1); else F_VA_WARR_NA(@0,$0,$#,$1);"
                                        "#elif %1==2" "if(^0) { CHK_BOUNDS($#,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$#],@1,$1);} else F_V_WARR_LP(@0,$0,$#,@1,$1);"
                                        "#endif";
ARRAY_SET_BEGB: writes "@0::[]",
                                attr_access 1,
                                reads "@0::asize",
                                var "INT $$c,$$s;",
                                init "$$c=$1-1;$$s=$0==NULL?0:ASIZE(@(0)$0);",
                                f_init "$$c=$1-1;$$s=FVOID($0)?0:^0?ASIZE(@(0)$0):F_ASIZE(@0,$0);",
                                iter "if(++$$c>=$$s) @@;"
                                        "SARR(@(0)$0,$$c,@(2)$2);",
                                f_iter "if(++$$c>=$$s) @@;"
                                        "#if %2==0" "if(^0) SARR(@(0)$0,$$c,@(2)$2); else F_R_WARR_NA(@0,$0,$$c,$2);"
                                        "#elif %2==1" "if(^0) SARR(@(0)$0,$$c,@(2)$2); else F_VA_WARR_NA(@0,$0,$$c,$2);"
                                        "#elif %2==2" "if(^0) { CHK_BOUNDS($$c,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$$c],@2,$2);} else F_V_WARR_LP(@0,$0,$$c,@2,$2);"
                                        "#endif";
ARRAY_SET_BEG_NUMB: writes "@0::[]",
                                attr_access 1,
                                reads "@0::asize",
                                var "INT $$c,$$m;",
                                init "$$c=$1-1;$$m=$1+$2;",
                                iter "if(++$$c>=$$m) @@;"
                                        "SARR(@(0)$0,$$c,@(3)$3);",
                                f_iter "if(++$$c>=$$m) @@;"
                                        "#if %3==0" "if(^0) SARR(@(0)$0,$$c,@(1)$3); else F_R_WARR_NA(@0,$0,$$c,$3);"
                                        "#elif %3==1" "if(^0) SARR(@(0)$0,$$c,@(1)$3); else F_VA_WARR_NA(@0,$0,$$c,$3);"
                                        "#elif %3==2" "if(^0) { CHK_BOUNDS($$c,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$$c],@3,$3);} else F_V_WARR_LP(@0,$0,$$c,@3,$3);"
                                        "#endif";
ARRAY_SET_BEG_NUM_STEPB: reads "@0::[]",
                                attr_access 1,
                                writes "@0::asize",
                                var "INT $$c,$$m;",
                                init "$$c=$1;$$m=$1+$2*$3;",
                                iter "if($3>=0&&$$c>=$$m||$3<0&&$$c<=$$m)@@;"
                                        "SARR(@(0)$0,$$c,@(4)$4);" "$$c+=$3;",
                                f_iter "if($$c>=$$m) @@;"
                                        "#if %4==0" "if(^0) SARR(@(0)$0,$$c,@(1)$4); else F_R_WARR_NA(@0,$0,$$c,$4);"
                                        "#elif %4==1" "if(^0) SARR(@(0)$0,$$c,@(1)$4); else F_VA_WARR_NA(@0,$0,$$c,$4);"
                                        "#elif %4==2" "if(^0) { CHK_BOUNDS($$c,0,ASIZE($0)-1,0);VASS_PP((@(0)$0)->arr_part[$$c],@4,$4);} else F_V_WARR_LP(@0,$0,$$c,@4,$4);"
                                        "#endif"
                                        "$$c+=$3;";
ARRAY_INDB: reads "@0::asize",
                                var "INT $$br;",
                                init "$$br=$0==NULL?0:ASIZE(@(0)$0);",
                                f_init "$$br=FVOID($0)?0:^0?ASIZE(@(0)$0):F_ASIZE(@0,$0);",
                                break "$$br",
                                temp "@r r$$;",
                                iter "r$$=$#;" "r$$";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
FILE_STDIN: no_pre,no_post,declare "#include <stdio.h>",exec "stdin";
FILE_STDOUT: no_pre,no_post,declare "#include <stdio.h>",exec "stdout";
FILE_STDERR: no_pre,no_post,declare "#include <stdio.h>",exec "stderr";
FILE_CLEAR: volatile,no_pre,no_post,declare "#include <stdio.h>",exec "clearerr((FILE *)$0);";
FILE_FWRITE_FSTR: volatile,no_pre,no_post,declare "#include <stdio.h>",var "@r $$;",exec "$$=fwrite(((@1)$1)->arr_part,$2,1,$3);" "$$",
                  f_exec "$$=p_fwrite(((@1)$1)->arr_part,$2,1,$3);" "$$";
FILE_FWRITE_STR: volatile,no_pre,no_post,declare "#include <stdio.h>",var "@r $$;",exec "$$=fwrite(((@1)$1)->arr_part,$2,1,$3);" "$$",
                  f_exec "$$=p_fwrite(((@1)$1)->arr_part,$2,1,$3);" "$$";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
IN_GETCHAR: volatile,no_pre,no_post,var "@r $$;",declare "#include <stdio.h>",exec "$$=(INT)getchar();" "$$";
IN_GET_STR_SIZED: volatile,no_pre,no_post,declare "#include <stdio.h>",exec "INGETSTRSIZED(((@1)$1),$2);";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
SYS_FLT_REP: no_pre,no_post,
                exec "SYSFLTREP($1,$2);",
                f_exec "SYSFLTREP($1,$2);";
SYS_FLTD_REP: no_pre,no_post,
                exec "SYSFLTDREP($1,$2,$3);",
                f_exec "SYSFLTDREP($1,$2,$3);";
SYS_DESTROY: volatile,no_pre,no_post,
                exec "SYSDESTROY($1);",
                f_exec "if(^0) SYSDESTROY($1); else F_SYSDESTROY($1);";
SYS_ID: no_pre,no_post,var "@r $$;",
                exec "$$=SYSID($1);" "$$",
                f_exec "$$=^0?SYSID($1):F_SYSID($1);" "$$";
SYS_TP: no_pre,no_post,var "@r $$;",
                exec "$$=SYSTP($1);" "$$",
                f_exec "$$=^0?SYSTP($1):F_SYSTP($1);" "$$";
SYS_STR_FOR_TP: no_pre,no_post,var "@r $$;",
                exec "$$=SYSSTRFORTP($1);" "$$";
SYS_EXT_OB_FOR: no_pre,no_post,var "@r $$;",
                exec "$$=SYSEXTOBFOR($1);" "$$";
SYS_OB_EQ: no_pre,no_post,var "@r $$;",
                exec "$$=SYSOBEQ($1);" "$$",
                f_exec "$$=(^0&&^1)?SYSOBEQ($1):F_SYSOBEQ($1);" "$$";
SYS_IMPORT: import,no_pre,no_post, exec "SYS_IMPORT;";
SYS_EXPORT: export,no_pre,no_post,exec "SYS_EXPORT;";
SYS_DEFER: no_pre,no_post,exec "SYS_DEFER;";
SYS_PSATHER_STATISTICS: exec "use_statistics((int)$1);";
SYS_PSATHER_TRACE: exec "use_trace((int)$1);";




-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
TIME_SECONDS: volatile,no_pre,no_post,var "@r $$;",exec "$$=(FLTD)time(NULL);" "$$";

TIMES_NOW: volatile,no_pre,no_post,declare "#include <sys/times.h>" "#include <limits.h>",
                var "struct tms $$;",
                exec "$0->$.wall_time=times(&$$);"
                     "$0->$.sys_time=$$.tms_stime;"
                     "$0->$.user_time=$$.tms_utime;"
                     "$0->$.child_sys_time=$$.tms_cstime;"
                     "$0->$.child_user_time=$$.tms_cutime;";
TIMES_CLK: no_pre,no_post,var "@r $$;",exec "$$=CLK_TCK;",declare "#include <limits.h>";

MEMORY_NOW: no_pre,no_post,exec "$0->$.sbrk_size=(long)sbrk(0);"
                        "$0->$.gc_size=(long)GC_get_heap_size();";



-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------

ZONE_CREATE: var "@r $$;", exec "$$=SI_create();" "$$";
ZONE_WITHIN: var "@r $$;", exec "$$=SI_within($0,$1);" "$$";
ZONE_DIVISIONS: var "@r $$;", exec "$$=SI_divisions($0);" "$$";
ZONE_DIVISION: fragile, var "@r $$;", exec "$$=SI_division($0,$1);" "$$";
ZONE_CAPACITY: var "@r $$;", exec "$$=SI_capacity($0);" "$$";

-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
F_INTEGER_CREATE_INT: no_pre,no_post,exec "INTF_INTEGER($1)";
F_INTEGER_INT: no_pre,no_post,exec "F_INTEGERINT($0)";
F_INTEGER_ZERO: no_pre,no_post,exec "F_INTEGER_zero";
F_INTEGER_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=F_INTEGERPLUS($0,$1);" "$$";
F_INTEGER_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=F_INTEGERMINUS($0,$1);" "$$";
F_INTEGER_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=F_INTEGERTIMES($0,$1);" "$$";
F_INTEGER_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=F_INTEGERDIV($0,$1);" "$$";
F_INTEGER_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=F_INTEGER_IS_EQ($0,$1);" "$$";
F_INTEGER_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=F_INTEGERIS_LT($0,$1);" "$$";

F_REAL_CREATE_FLT: no_pre,no_post,exec "FLTF_REAL($1)";
F_REAL_FLT: no_pre,no_post,exec "F_REALFLT($0)";
F_REAL_ZERO: no_pre,no_post,exec "F_REAL_zero";
F_REAL_PLUS: arith,no_pre,no_post,var "@r $$;",exec "$$=F_REALPLUS($0,$1);" "$$";
F_REAL_MINUS: arith,no_pre,no_post,var "@r $$;",exec "$$=F_REALMINUS($0,$1);" "$$";
F_REAL_TIMES: arith,no_pre,no_post,var "@r $$;",exec "$$=F_REALTIMES($0,$1);" "$$";
F_REAL_DIV: arith,no_pre,no_post,var "@r $$;",exec "$$=F_REALDIV($0,$1);" "$$";
F_REAL_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=F_REAL_IS_EQ($0,$1);" "$$";
F_REAL_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=F_REALIS_LT($0,$1);" "$$";


F_DOUBLE_CREATE_FLTD: no_pre,no_post,exec "FLTDF_DOUBLE($1)";
F_DOUBLE_FLTD: no_pre,no_post,exec "F_DOUBLEFLTD($0)";
F_DOUBLE_ZERO: no_pre,no_post,exec "F_DOUBLE_zero";
F_DOUBLE_PLUS: arith,no_pre,no_post,var "@r $$;",exec "$$=F_DOUBLEPLUS($0,$1);" "$$";
F_DOUBLE_MINUS: arith,no_pre,no_post,var "@r $$;",exec "$$=F_DOUBLEMINUS($0,$1);" "$$";
F_DOUBLE_TIMES: arith,no_pre,no_post,var "@r $$;",exec "$$=F_DOUBLETIMES($0,$1);" "$$";
F_DOUBLE_DIV: arith,no_pre,no_post,var "@r $$;",exec "$$=F_DOUBLEDIV($0,$1);" "$$";
F_DOUBLE_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=F_DOUBLE_IS_EQ($0,$1);" "$$";
F_DOUBLE_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=F_DOUBLEIS_LT($0,$1);" "$$";


F_LOGICAL_CREATE_BOOL: no_pre,no_post,exec "BOOLF_LOGICAL($1)";
F_LOGICAL_BOOL: no_pre,no_post,exec "F_LOGICALBOOL($0)";
F_LOGICAL_ZERO: no_pre,no_post,exec "F_LOGICAL_zero";
F_LOGICAL_NOT: no_pre,no_post,var "@r $$;",exec "$$=F_LOGICALNOT($0);" "$$";
F_LOGICAL_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=F_LOGICAL_IS_EQ($0,$1);" "$$";
F_LOGICAL_OR: no_pre,no_post,var "@r $$;",exec "$$=F_LOGICALOR($0,$1);" "$$";
F_LOGICAL_AND: no_pre,no_post,var "@r $$;",exec "$$=F_LOGICALAND($0,$1);" "$$";


F_CHARACTER_CREATE_CHAR: no_pre,no_post,exec "CHARF_CHARACTER($1)";
F_CHARACTER_CHAR: no_pre,no_post,exec "F_CHARACTERCHAR($0)";
F_CHARACTER_ZERO: no_pre,no_post,exec "F_CHARACTER_zero";
F_CHARACTER_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=F_CHARACTER_IS_EQ($0,$1);" "$$";
F_CHARACTER_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=F_CHARACTERIS_LT($0,$1);" "$$";



F_STRING_CREATE_CHAR: no_pre,no_post,var "@r $$;",
                        exec
                        "$$=(@0)ZALLOC(sizeof(@0_struct));"
                        "$$->address=(F_CHARACTER *)ZALLOC(sizeof(F_CHARACTER));"
                        "$$->size=(F_LENGTH)1;"
                        "*($$->address)=(F_CHARACTER)$1;"
                        "$$";
F_STRING_CREATE_STR: no_pre,no_post, reads "@1::asize",
                        var "@r $$;",
                        exec
                        "$$=(@0)ZALLOC(sizeof(@0_struct));"
                        "$$->address=(F_CHARACTER *)ZALLOC($1->asize);"
                        "$$->size=(F_LENGTH)$1->asize;"
                        "memcpy($$->address,$1->arr_part,$1->asize);"
                        "$$";
F_STRING_CREATE_INT: no_pre,no_post, reads "@1::asize",
                        var "@r $$;",
                        exec
                        "$$=(@0)ZALLOC(sizeof(@0_struct));"
                        "$$->address=(F_CHARACTER *)ZALLOC($1);"
                        "$$->size=(F_LENGTH)$1;"
                        "$$";

F_STRING_ADDRESS: no_pre,no_post, exec "$0->address";
F_STRING_SIZE: no_pre,no_post, exec "$0->size";

F_COMPLEX_READ_RE: no_pre,no_post, exec "$0.re";
F_COMPLEX_WRITE_RE: no_pre,no_post, exec "$0.re=$1;";
F_COMPLEX_READ_IM: no_pre,no_post, exec "$0.im";
F_COMPLEX_WRITE_IM: no_pre,no_post, exec "$0.im=$1;";
F_COMPLEX_ZERO: no_pre,no_post,exec "F_COMPLEX_zero";

F_DOUBLE_COMPLEX_READ_RE: no_pre,no_post, exec "$0.re";
F_DOUBLE_COMPLEX_WRITE_RE: no_pre,no_post, exec "$0.re=$1;";
F_DOUBLE_COMPLEX_READ_IM: no_pre,no_post, exec "$0.im";
F_DOUBLE_COMPLEX_WRITE_IM: no_pre,no_post, exec "$0.im=$1;";
F_DOUBLE_COMPLEX_ZERO: no_pre,no_post,exec "F_DOUBLE_COMPLEX_zero";

F_HANDLER_SET_HANDLER: no_pre,no_post, exec "$0=(@0)$1;";
F_HANDLER_INVOKE_HANDLER: no_pre,no_post, exec "F_HANDLERINVOKE_HANDLER($0)";


-- FORTRAN arrays
F_ARRAY_CREATE_INT: no_pre,no_post, exec "(@0)ZALLOC($1*sizeof(@P0))";
F_ARRAY_CREATE_AREF: no_pre,no_post, exec "(@0)$1->arr_part";
F_ARRAY_AGET: no_pre,no_post, exec "*((@P0 *)$0 + $1)";
F_ARRAY_ASET: no_pre,no_post, exec "*((@P0 *)$0 + $1)=$2";

F_ARRAY2_CREATE_INT_INT: no_pre,no_post, exec "(@0)ZALLOC($1*$2*sizeof(@P0))";
F_ARRAY2_CREATE_ARRAY2: no_pre,no_post, exec "(@0)$1->arr_part";

F_ARRAY3_CREATE_INT_INT_INT: no_pre,no_post, exec "(@0)ZALLOC($1*$2*$3*sizeof(@P0))";
F_ARRAY3_CREATE_ARRAY3: no_pre,no_post, exec "(@0)$1->arr_part";

F_ARRAY2_CREATE_MAT: no_pre,no_post, exec "(@0)$1->arr_part";






-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
C_CHAR_CREATE_CHAR: no_pre,no_post,exec "CHARC_CHAR($1)";
C_CHAR_CHAR: no_pre,no_post,exec "C_CHARCHAR($0)";
C_CHAR_ZERO: no_pre,no_post,exec "C_CHAR_zero";
C_CHAR_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_CHARPLUS($0,$1);" "$$";
C_CHAR_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_CHARMINUS($0,$1);" "$$";
C_CHAR_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_CHARTIMES($0,$1);" "$$";
C_CHAR_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_CHARDIV($0,$1);" "$$";
C_CHAR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_CHAR_IS_EQ($0,$1);" "$$";
C_CHAR_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_CHARIS_LT($0,$1);" "$$";

C_UNSIGNED_CHAR_CREATE_CHAR: no_pre,no_post,exec "CHARC_UNSIGNED_CHAR($1)";
C_UNSIGNED_CHAR_CHAR: no_pre,no_post,exec "C_UNSIGNED_CHARCHAR($0)";
C_UNSIGNED_CHAR_ZERO: no_pre,no_post,exec "C_UNSIGNED_CHAR_zero";
C_UNSIGNED_CHAR_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_CHARPLUS($0,$1);" "$$";
C_UNSIGNED_CHAR_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_CHARMINUS($0,$1);" "$$";
C_UNSIGNED_CHAR_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_CHARTIMES($0,$1);" "$$";
C_UNSIGNED_CHAR_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_CHARDIV($0,$1);" "$$";
C_UNSIGNED_CHAR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_CHAR_IS_EQ($0,$1);" "$$";
C_UNSIGNED_CHAR_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_CHARIS_LT($0,$1);" "$$";

C_SIGNED_CHAR_CREATE_CHAR: no_pre,no_post,exec "CHARC_SIGNED_CHAR($1)";
C_SIGNED_CHAR_CHAR: no_pre,no_post,exec "C_SIGNED_CHARCHAR($0)";
C_SIGNED_CHAR_ZERO: no_pre,no_post,exec "C_SIGNED_CHAR_zero";
C_SIGNED_CHAR_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_SIGNED_CHARPLUS($0,$1);" "$$";
C_SIGNED_CHAR_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_SIGNED_CHARMINUS($0,$1);" "$$";
C_SIGNED_CHAR_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_SIGNED_CHARTIMES($0,$1);" "$$";
C_SIGNED_CHAR_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_SIGNED_CHARDIV($0,$1);" "$$";
C_SIGNED_CHAR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_SIGNED_CHAR_IS_EQ($0,$1);" "$$";
C_SIGNED_CHAR_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_SIGNED_CHARIS_LT($0,$1);" "$$";

C_SHORT_CREATE_INT: no_pre,no_post,exec "INTC_SHORT($1)";
C_SHORT_INT: no_pre,no_post,exec "C_SHORTINT($0)";
C_SHORT_ZERO: no_pre,no_post,exec "C_SHORT_zero";
C_SHORT_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_SHORTPLUS($0,$1);" "$$";
C_SHORT_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_SHORTMINUS($0,$1);" "$$";
C_SHORT_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_SHORTTIMES($0,$1);" "$$";
C_SHORT_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_SHORTDIV($0,$1);" "$$";
C_SHORT_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_SHORT_IS_EQ($0,$1);" "$$";
C_SHORT_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_SHORTIS_LT($0,$1);" "$$";

C_INT_CREATE_INT: no_pre,no_post,exec "INTC_INT($1)";
C_INT_INT: no_pre,no_post,exec "C_INTINT($0)";
C_INT_ZERO: no_pre,no_post,exec "C_INT_zero";
C_INT_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_INTPLUS($0,$1);" "$$";
C_INT_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_INTMINUS($0,$1);" "$$";
C_INT_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_INTTIMES($0,$1);" "$$";
C_INT_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_INTDIV($0,$1);" "$$";
C_INT_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_INT_IS_EQ($0,$1);" "$$";
C_INT_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_INTIS_LT($0,$1);" "$$";

C_LONG_CREATE_INT: no_pre,no_post,exec "INTC_LONG($1)";
C_LONG_INT: no_pre,no_post,exec "C_LONGINT($0)";
C_LONG_ZERO: no_pre,no_post,exec "C_LONG_zero";
C_LONG_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_LONGPLUS($0,$1);" "$$";
C_LONG_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_LONGMINUS($0,$1);" "$$";
C_LONG_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_LONGTIMES($0,$1);" "$$";
C_LONG_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_LONGDIV($0,$1);" "$$";
C_LONG_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_LONG_IS_EQ($0,$1);" "$$";
C_LONG_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_LONGIS_LT($0,$1);" "$$";

C_UNSIGNED_SHORT_CREATE_INT: no_pre,no_post,exec "INTC_UNSIGNED_SHORT($1)";
C_UNSIGNED_SHORT_INT: no_pre,no_post,exec "C_UNSIGNED_SHORTINT($0)";
C_UNSIGNED_SHORT_ZERO: no_pre,no_post,exec "C_UNSIGNED_SHORT_zero";
C_UNSIGNED_SHORT_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_SHORTPLUS($0,$1);" "$$";
C_UNSIGNED_SHORT_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_SHORTMINUS($0,$1);" "$$";
C_UNSIGNED_SHORT_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_SHORTTIMES($0,$1);" "$$";
C_UNSIGNED_SHORT_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_SHORTDIV($0,$1);" "$$";
C_UNSIGNED_SHORT_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_SHORT_IS_EQ($0,$1);" "$$";
C_UNSIGNED_SHORT_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_SHORTIS_LT($0,$1);" "$$";

C_UNSIGNED_INT_CREATE_INT: no_pre,no_post,exec "INTC_UNSIGNED_INT($1)";
C_UNSIGNED_INT_INT: no_pre,no_post,exec "C_UNSIGNED_INTINT($0)";
C_UNSIGNED_INT_ZERO: no_pre,no_post,exec "C_UNSIGNED_INT_zero";
C_UNSIGNED_INT_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_INTPLUS($0,$1);" "$$";
C_UNSIGNED_INT_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_INTMINUS($0,$1);" "$$";
C_UNSIGNED_INT_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_INTTIMES($0,$1);" "$$";
C_UNSIGNED_INT_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_INTDIV($0,$1);" "$$";
C_UNSIGNED_INT_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_INT_IS_EQ($0,$1);" "$$";
C_UNSIGNED_INT_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_INTIS_LT($0,$1);" "$$";

C_UNSIGNED_LONG_CREATE_INT: no_pre,no_post,exec "INTC_UNSIGNED_LONG($1)";
C_UNSIGNED_LONG_INT: no_pre,no_post,exec "C_UNSIGNED_LONGINT($0)";
C_UNSIGNED_LONG_ZERO: no_pre,no_post,exec "C_UNSIGNED_LONG_zero";
C_UNSIGNED_LONG_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_LONGPLUS($0,$1);" "$$";
C_UNSIGNED_LONG_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_LONGMINUS($0,$1);" "$$";
C_UNSIGNED_LONG_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_LONGTIMES($0,$1);" "$$";
C_UNSIGNED_LONG_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_UNSIGNED_LONGDIV($0,$1);" "$$";
C_UNSIGNED_LONG_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_LONG_IS_EQ($0,$1);" "$$";
C_UNSIGNED_LONG_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_LONGIS_LT($0,$1);" "$$";

C_FLOAT_CREATE_FLT: no_pre,no_post,exec "FLTC_FLOAT($1)";
C_FLOAT_FLT: no_pre,no_post,exec "C_FLOATFLT($0)";
C_FLOAT_ZERO: no_pre,no_post,exec "C_FLOAT_zero";
C_FLOAT_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_FLOATPLUS($0,$1);" "$$";
C_FLOAT_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_FLOATMINUS($0,$1);" "$$";
C_FLOAT_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_FLOATTIMES($0,$1);" "$$";
C_FLOAT_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_FLOATDIV($0,$1);" "$$";
C_FLOAT_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_FLOAT_IS_EQ($0,$1);" "$$";
C_FLOAT_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_FLOATIS_LT($0,$1);" "$$";

C_DOUBLE_CREATE_FLTD: no_pre,no_post,exec "FLTDC_DOUBLE($1)";
C_DOUBLE_FLTD: no_pre,no_post,exec "C_DOUBLEFLTD($0)";
C_DOUBLE_ZERO: no_pre,no_post,exec "C_DOUBLE_zero";
C_DOUBLE_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_DOUBLEPLUS($0,$1);" "$$";
C_DOUBLE_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_DOUBLEMINUS($0,$1);" "$$";
C_DOUBLE_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_DOUBLETIMES($0,$1);" "$$";
C_DOUBLE_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_DOUBLEDIV($0,$1);" "$$";
C_DOUBLE_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_DOUBLE_IS_EQ($0,$1);" "$$";
C_DOUBLE_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_DOUBLEIS_LT($0,$1);" "$$";

C_LONG_DOUBLE_CREATE_FLTD: no_pre,no_post,exec "FLTDC_LONG_DOUBLE($1)";
C_LONG_DOUBLE_FLTD: no_pre,no_post,exec "C_LONG_DOUBLEFLTD($0)";
C_LONG_DOUBLE_ZERO: no_pre,no_post,exec "C_LONG_DOUBLE_zero";
C_LONG_DOUBLE_PLUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_LONG_DOUBLEPLUS($0,$1);" "$$";
C_LONG_DOUBLE_MINUS: arith,no_pre,no_post,var "@r $$;", exec "$$=C_LONG_DOUBLEMINUS($0,$1);" "$$";
C_LONG_DOUBLE_TIMES: arith,no_pre,no_post,var "@r $$;", exec "$$=C_LONG_DOUBLETIMES($0,$1);" "$$";
C_LONG_DOUBLE_DIV: arith,no_pre,no_post,var "@r $$;", exec "$$=C_LONG_DOUBLEDIV($0,$1);" "$$";
C_LONG_DOUBLE_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_LONG_DOUBLE_IS_EQ($0,$1);" "$$";
C_LONG_DOUBLE_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=C_LONG_DOUBLEIS_LT($0,$1);" "$$";

CONVERT_FROM_C_PTR_CREATE_C_PTR: no_pre,no_post,exec "(@0)$1";
CONVERT_TO_C_PTR: no_pre,no_post,exec "(C_PTR)$0";

C_PTR_ZERO: no_pre,no_post,exec "C_PTR_zero";
C_CHAR_PTR_ZERO: no_pre,no_post,exec "C_CHAR_PTR_zero";
C_UNSIGNED_CHAR_PTR_ZERO: no_pre,no_post,exec "C_UNSIGNED_CHAR_PTR_zero";
C_SIGNED_CHAR_PTR_ZERO: no_pre,no_post,exec "C_SIGNED_CHAR_PTR_zero";
C_SHORT_PTR_ZERO: no_pre,no_post,exec "C_SHORT_PTR_zero";
C_INT_PTR_ZERO: no_pre,no_post,exec "C_INT_PTR_zero";
C_LONG_PTR_ZERO: no_pre,no_post,exec "C_LONG_PTR_zero";
C_UNSIGNED_SHORT_PTR_ZERO: no_pre,no_post,exec "C_UNSIGNED_SHORT_PTR_zero";
C_UNSIGNED_INT_PTR_ZERO: no_pre,no_post,exec "C_UNSIGNED_INT_PTR_zero";
C_UNSIGNED_LONG_PTR_ZERO: no_pre,no_post,exec "C_UNSIGNED_LONG_PTR_zero";
C_FLOAT_PTR_ZERO: no_pre,no_post,exec "C_FLOAT_PTR_zero";
C_DOUBLE_PTR_ZERO: no_pre,no_post,exec "C_DOUBLE_PTR_zero";
C_LONG_DOUBLE_PTR_ZERO: no_pre,no_post,exec "C_LONG_DOUBLE_PTR_zero";

C_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_PTR_IS_EQ($0,$1);" "$$";
C_CHAR_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_CHAR_PTR_IS_EQ($0,$1);" "$$";
C_UNSIGNED_CHAR_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_CHAR_PTR_IS_EQ($0,$1);" "$$";
C_SIGNED_CHAR_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_SIGNED_CHAR_PTR_IS_EQ($0,$1);" "$$";
C_SHORT_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_SHORT_PTR_IS_EQ($0,$1);" "$$";
C_INT_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_INT_PTR_IS_EQ($0,$1);" "$$";
C_LONG_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_LONG_PTR_IS_EQ($0,$1);" "$$";
C_UNSIGNED_SHORT_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_SHORT_PTR_IS_EQ($0,$1);" "$$";
C_UNSIGNED_INT_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_INT_PTR_IS_EQ($0,$1);" "$$";
C_UNSIGNED_LONG_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_UNSIGNED_LONG_PTR_IS_EQ($0,$1);" "$$";
C_FLOAT_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_FLOAT_PTR_IS_EQ($0,$1);" "$$";
C_DOUBLE_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_DOUBLE_PTR_IS_EQ($0,$1);" "$$";
C_LONG_DOUBLE_PTR_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=C_LONG_DOUBLE_PTR_IS_EQ($0,$1);" "$$";
-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- most of the functions and macros used in this file are defined
-- in am.h, the rest in pSather.h
THREAD_ID_NIL: no_pre,no_post,var "@r $$;",exec "$$=BR_INVALID_ID();" "$$";
THREAD_ID_ME: no_pre,no_post,var "@r $$;",exec "$$=PSATHER_THREAD_ID;" "$$";
THREAD_ID_IS_EQ: no_pre,no_post,var "@r $$;",exec "$$=BR_SAME_THREAD($0,$1);" "$$";
THREAD_ID_IS_LT: no_pre,no_post,var "@r $$;",exec "$$=BR_THREAD_LT($0,$1);" "$$";
THREAD_ID_HASH: no_pre,no_post,var "@r $$;",exec "$$=BR_THREAD_HASH($0);" "$$";
THREAD_ID_STR: no_pre,no_post,var "@r $$;char $$p[30];",
                                   exec "thr_print_id($0,$$p);"
                                        "$$=(@r)rt_arr_alloc(sizeof(struct STR_struct),STR_tag,sizeof(CHAR),strlen($$p)+1);"
                                        "$$->asize=strlen($$p);"
                                        "strcpy($$->arr_part,$$p);"
                                        "$$";


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- most of the functions and macros used in this file are defined
-- in am.h, the rest in pSather.h
TIMING_TIME: no_pre,no_post,
                declare "extern int start_sec;",
                var "struct timeval $$now;",
                exec "gettimeofday(&$$now,NULL);"
                     "*$1=$$now.tv_sec-start_sec;"
                     "*$2=$$now.tv_usec;";


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- most of the functions and macros used in this file are defined
-- in am.h, the rest in pSather.h
LL_LOCK_INIT: no_pre,no_post,volatile,exec "$0->lck=BR_LOCK_CREATE();";
LL_LOCK_L_LCK: no_pre,no_post,volatile,exec "BR_LOCK($0->lck);";
LL_LOCK_L_UNLCK: no_pre,no_post,volatile,exec "BR_UNLOCK($0->lck);";
LL_LOCK_L_TRY: no_pre,no_post,volatile,var "@r $$;",exec "$$=BR_TRY_LOCK($0->lck);" "$$";
LL_LOCK_LCK: no_pre,no_post,volatile,exec "if (FAR($0)) {ll_lock_lck_remote($0);} else {BR_LOCK($0->lck);}";
LL_LOCK_UNLCK: no_pre,no_post,volatile,exec "if (FAR($0)) {ll_lock_unlck_remote($0);;} else {BR_UNLOCK($0->lck);}";
LL_LOCK_TRY: no_pre,no_post,volatile,var "@r $$;",exec "if (FAR($0)) {$$=ll_lock_try_remote($0);} else {$$=BR_TRY_LOCK($0->lck);}" "$$";


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- most of the functions and macros used in this file are defined
-- in am.h, the rest in pSather.h
SPINLOCK_INIT: no_pre,no_post,volatile,exec "SPINLOCK_CREATE($0);";
SPINLOCK_L_LCK: no_pre,no_post,volatile,exec "SPINLOCK_LCK($0);";
SPINLOCK_L_UNLCK: no_pre,no_post,volatile,exec "SPINLOCK_UNLCK($0);";
SPINLOCK_L_TRY: no_pre,no_post,volatile,var "@r $$;",exec "$$=SPINLOCK_TRY($0);" "$$";
SPINLOCK_LCK: no_pre,no_post,volatile,exec "if (FAR($0)) {spinlock_lck_remote($0);} else {SPINLOCK_LCK($0);}";
SPINLOCK_UNLCK: no_pre,no_post,volatile,exec "if (FAR($0)) {spinlock_unlck_remote($0);} else {SPINLOCK_UNLCK($0);}";
SPINLOCK_TRY: no_pre,no_post,volatile,var "@r $$;",exec "if (FAR($0)) {$$=spinlock_try_remote($0);} else {$$=SPINLOCK_TRY($0);}" "$$";


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------
-- most of the functions and macros used in this file are defined
-- in am.h, the rest in pSather.h
SEMA_CREATE: no_pre,no_post,volatile,exec "SEMA_CREATE($1);";
SEMA_WAIT: no_pre,no_post,volatile,exec "SEMA_WAIT($0);";
SEMA_SIGNAL: no_pre,no_post,volatile,exec "SEMA_SIGNAL($0);";
SEMA_TRY: no_pre,no_post,volatile,var "@r $$;",exec "$$=SEMA_TRY($0);" "$$";
SEMA_DELETE: no_pre,no_post,volatile,exec "SEMA_DELETE($0);";


-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------




LM_LOCK_C_ARRAY_CREATE: volatile, no_pre, no_post,
        var "int i;"
                "@r $$;",
        exec "$$ = (@r)malloc($2 * sizeof(@r));"
                "if (FAR($1) { lm_get_remote_locks($$,$1,$2); "
                "} else { for(i=0;i<$2;i++) $$[i] = ((@r)locks)[i]; }"
                "$$";

GET_REMOTE_C_ARRAY: volatile, no_pre, no_post,
        var "int i;"
                "int offset;"
                "BR_spinlock_t spinlock;"
                "@r $$;",
        exec "$$ = (@r)malloc(($2) * sizeof(@r));"
                "BR_SPINLOCK_INIT(spinlock);"
                "BR_SPINLOCK_LOCK(spinlock);"
                "for (i=0, offset=0; i<($2); i++, offset+=sizeof(void*)) {"
                " BR_REQUEST_3($3,(BR_handler_3_t)lm_get_remote_ptr_request,(BR_word_t)(($1)+offset),(BR_word_t)(($$)+offset),(BR_word_t)(&spinlock));"
                " BR_SPINLOCK_LOCK(spinlock);"
                "}"
                "$$";





-----------------> GNU Sather - compiler configuration file <----------------
-- Copyright (C) 199x by International Computer Science Institute --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute and/or modify it under the terms of the GNU Library General --
-- Public License (LGPL) as published by the Free Software Foundation; --
-- either version 2 of the license, or (at your option) any later version. --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details. --
-- The license text is also available from: Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --
--------------> Please email comments to <bug-sather@gnu.org> <--------------





LM_SINGLE_MUTEX_MANAGER_AASL: volatile, no_pre, no_post,
        reads "@0::.ll_mutex" "@0::locked" "@0::locked_by" "@0::my_manager",
        writes "@0::locked" "@0::locked_by",
        var "BR_spinlock_t lm_ll_mutex;"
                "@.locked_by lm_thread_id;"
                "@r $$;",
        exec "if (FAR($0)) { $$=FALSE;"
                "} else {"
                " lm_ll_mutex = ATTR(ATTR($0,$.ll_mutex),lck);"
                " BR_SPINLOCK_LOCK(lm_ll_mutex);"
                " if((void*)(ATTR($0,$.my_manager))!=(void*)($0)) { $$=FALSE;"
                " } else {"
                "  lm_thread_id = PSATHER_THREAD_ID;"
                "  if (ATTR($0,$.locked) == 0 || BR_SAME_THREAD(ATTR($0,$.locked_by),lm_thread_id)) {"
                "   ATTR($0,$.locked) ++; ATTR($0,$.locked_by) = lm_thread_id;"
                "   BR_SPINLOCK_UNLOCK(lm_ll_mutex);"
                "   $$ = TRUE;"
                "  } else { $$ = FALSE;}"
                " }"
                "}"
                "$$";

LM_SINGLE_MUTEX_MANAGER_ATSL: volatile, no_pre, no_post,
        reads "@0::.ll_mutex" "@0::locked" "@0::locked_by" "@0::my_manager",
        writes "@0::locked" "@0::locked_by",
        var "BR_spinlock_t lm_ll_mutex;"
                "@.locked_by lm_thread_id;"
                "@r $$;",
        exec "if (FAR($0)) { $$=FALSE;"
                "} else {"
                " lm_ll_mutex = ATTR(ATTR($0,$.ll_mutex),lck);"
                " BR_SPINLOCK_LOCK(lm_ll_mutex);"
                " if((void*)(ATTR($0,$.my_manager))!=(void*)($0)) { $$ = -1;"
                " } else {"
                "  lm_thread_id = BR_THREAD_ID();"
                "  if (ATTR($0,$.locked) == 0 || BR_SAME_THREAD(ATTR($0,$.locked_by),lm_thread_id)) {"
                "   ATTR($0,$.locked) ++; ATTR($0,$.locked_by) = lm_thread_id;"
                "   $$ = 0;"
                "  } else { $$ = 1;}"
                "  BR_SPINLOCK_UNLOCK(lm_ll_mutex);"
                " }"
                "}"
                "$$";

LM_SINGLE_MUTEX_MANAGER_ARSL: volatile, no_pre, no_post,
        reads "@0::.ll_mutex"
                "@0::locked"
                "@0::my_manager"
                "@0::no_thread_waiting",
        writes "@0::locked",
        var "BR_spinlock_t lm_ll_mutex;"
                "@.locked_by lm_thread_id;"
                "@r $$;",
        exec "if (FAR($0)) { $$=FALSE;"
                "} else {"
                " lm_ll_mutex = ATTR(ATTR($0,$.ll_mutex),lck);"
                " BR_SPINLOCK_LOCK(lm_ll_mutex);"
                " if((void*)(ATTR($0,$.my_manager))!=(void*)($0)) { $$ = FALSE;"
                " } else {"
                "  ATTR($0,$.locked) -= 1;"
                "  if (ATTR($0,$.locked) != 0) {"
                "   BR_SPINLOCK_UNLOCK(lm_ll_mutex);"
                "   $$ = TRUE;"
                "  } else {"
                "   if (ATTR($0,$.no_thread_waiting)) {"
                "    BR_SPINLOCK_UNLOCK(lm_ll_mutex);"
                "    $$ = TRUE;"
                "   } else { $$ = FALSE; }"
                "  }"
                " }"
                "}"
                "$$";
