Mercurial > repos > rhope
diff runtime/integer.c @ 12:31f8182f3433
Finished fib test and did some small work on the c backend
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 25 May 2009 23:34:36 -0400 |
parents | 3021dac0d8f5 |
children | ea991f95ae1f |
line wrap: on
line diff
--- a/runtime/integer.c Tue May 19 23:29:55 2009 -0400 +++ b/runtime/integer.c Mon May 25 23:34:36 2009 -0400 @@ -1,16 +1,17 @@ #include "integer.h" #include "builtin.h" #include "context.h" +#include "bool.h" -#define left ((_t_Int32 *)cdata->params[0]) -#define right ((_t_Int32 *)cdata->params[1]) +#define left ((t_Int32 *)cdata->params[0]) +#define right ((t_Int32 *)cdata->params[1]) MethodNoLocals(_PL_,Int32, NumParams 2, CallSpace 1) - CopiedParam(0, left, Int32, TYPE_INT32) - Param(1, right, Int32, TYPE_INT32) + CopiedParam(0, TYPE_INT32) + Param(1, TYPE_INT32) left->num += right->num; @@ -21,19 +22,55 @@ NumParams 2, CallSpace 1) - CopiedParam(0, left, Int32, TYPE_INT32) - Param(1, right, Int32, TYPE_INT32) + CopiedParam(0, TYPE_INT32) + Param(1, TYPE_INT32) left->num -= right->num; release_ref((object *)right); EndFunc +MethodNoLocals(_LT_,Int32, + NumParams 2, + CallSpace 1) + + Param(0, TYPE_INT32) + Param(1, TYPE_INT32) + + if(left->num < right->num) + { + release_ref(cdata->params[0]); + Ret(0, Yes) + } else { + release_ref(cdata->params[0]); + Ret(0, No) + } + release_ref(cdata->params[0]); +EndFunc + +MethodNoLocals(_GT_,Int32, + NumParams 2, + CallSpace 1) + + Param(0, TYPE_INT32) + Param(1, TYPE_INT32) + + if(left->num > right->num) + { + release_ref(cdata->params[0]); + Ret(0, Yes) + } else { + release_ref(cdata->params[0]); + Ret(0, No) + } + release_ref(cdata->params[0]); +EndFunc + object * make_Int32(int32_t val) { - _t_Int32 * obj; + t_Int32 * obj; object * ret = new_object(TYPE_INT32); - obj = (_t_Int32 *)ret; + obj = (t_Int32 *)ret; obj->num = val; return ret; }