Hi all
Here i am tring to implement some SphinxC features to a SmallerC .
SmallerC is a simple and one pass c compiler , you can found it here https://github.com/alexfru/SmallerC (https://github.com/alexfru/SmallerC)
Some lights of the project
===================
+ allow to mix c and asm code syntax.
+ using High level asm
+ adding some masm features
+ it uses Nasm or Fasm as backend
+ adding some sphinxC features
any way it will be opne source so that any one want to contribute will do it easlly.
I start my modified code with term "Emil stuff" and end it with term "end Emil stuff" , so search for those terms for easy tracking.
will post my uncomleted project by tomorrow.
see you
thanks.
Hi ALL,
before posting my -'opend source'- uncmopleted project , i want to show this demo first.
It is implementing of local Masm Lable "@@:" , already done for asm code and also for the c code it self.
it also showing you how to call asm code just like the original c function , see the printf and hwo we call MyTest asm lable.
here is the code
/*
How to compile for Windows:
smlrcc -win Label.c -o Label.exe
*/
// Masm local lable demo
#include <stdio.h>
// here applied to asm code just like Masm
#asm
.code
MyTest:
jmp @f
mov EAX , 1
@@:
mov EAX , 2
ret
#endasm
// here applied to c code it self
int main(void)
{
int k = 20;
goto @f;
puts("Hello, World!"); // never printed
@@:
k--;
while(k>0) goto @b;
puts("great , is'nt it \n");
// MyTest is a asm lable.
printf("test = %d",MyTest());
return 0;
}
hope you like it , feel free to add any freaturs you want and share it with us.
will post it by next few hours.
Hi all
here is the source code of SC-- .
as i mentioned above it is uncompleted project , feel free to add any features.
Hi all
here is an other demo showing you how to use inline asm with SC--.
implemented SphinxC-- directive " #pragma option ia+ "
fixed one bug in doOprnd2 function in asm.c
/*
How to compile for Windows:
smlrcc -win inlineasm.c -o inlineasm.exe
*/
// inline asm demo
#include <stdio.h>
//using inline asm keywords directly
#pragma option ia+
unsigned test1()
{
puts("HI from C ...");
mov EAX , 1
}
#pragma option ia-
//using inline asm keywords by $
unsigned test2()
{
$ mov EAX , 2
}
//using inline asm keywords by #asm directive
unsigned test3()
{
#asm
mov EAX , 3
#endasm
}
//using inline asm keywords of smaller C itself
unsigned test4()
{
asm("mov eax, 0x4\n");
}
int main(void)
{
printf("test1 = %d\n" , test1() );
printf("test2 = %d\n" , test2() );
printf("test3 = %d\n" , test3() );
printf("test4 = %d\n" , test4() );
puts("great , is not it ?");
return 0;
}
simple and easy , ..........
Hi all
Here i have implemented the sphinxC-- keyword "FROM" , which load data from file and inserted it in our outfile.
Example to show you the idea
=====================
/*
How to compile for Windows:
smlrcc -win from.c -o from.exe
*/
// From Keyword Demo
#include <stdio.h>
extern char msg[];
extern int num;
#asm
.data
num:
dd 1000
msg:
from "msg.txt"
DB 0
#endasm
int main(void)
{
puts(msg);
printf("num = %d\n",num);
return 0;
}
simple and easy , ..........
Hi all
includepath keyword of SphinxC-- is implemented to SC--.
if the '$' found in the first char of string that hold the path , SC-- will relpace to smlrc.exe folder.
here is the example Demo
===================
/*
How to compile for Windows:
smlrcc -win incpath.c -o incpath.exe
*/
// includepath demo
// here the '$' will replasec with
// full path of smlrc.exe
#includepath "$..\\include1"
#includepath "$..\\include2"
#includepath "D:\\SmallerC-master\\v0100\\include3"
#includepath "D:\\SmallerC-master\\v0100\\include4"
#include "stdio.h"
// here applied to asm code just like Masm
#asm
.code
MyTest:
jmp @f
mov EAX , 1
@@:
mov EAX , 2
ret
#endasm
// here applied to c code it self
int main(void)
{
int k = 20;
goto @f;
puts("Hello, World!"); // never printed
@@:
k--;
while(k>0) goto @b;
puts("great , is'nt it \n");
printf("test = %d",MyTest());
return 0;
}
simple and easy , ..........
Hi All
The masm PROTO keyword is implemented with SC--.
Also masm OPTION PROLOGUE/EPILOGUE keyword is implemented with SC--.
so you can mix C asm masm as the following
#include <stdio.h>
int stdcall CTest(int val); // usual C prototype
MyTest PROTO stdcall , val : int // usual masm prototype
#asm
.code
MyTest:
mov EAX , [ESP+4]
add EAX , 2
ret 4
#endasm
int stdcall CTest(int val)
{
return 1;
}
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
int CTest2(int k)
{
return k+1;
}
OPTION PROLOGUE:PrologueDef
OPTION EPILOGUE:EpilogueDef
int main(void)
{
printf("test = %d\n",CTest(4));
printf("test = %d\n",MyTest(10));
printf("test = %d\n",CTest2(6));
return 0;
}
as you can see mixing C and Masm is
simple and easy , ..........