Example #1
0
void funca(void)
{
  foobar fb;
  foobar *bf;

  if (count < 10)
    {
      count++;
      funcb(count);
    }

  fb.nothing = "Foo Bar";
  fb.f = 42;
  fb.s = 19;

  bf = malloc (sizeof (foobar));
  bf->nothing = malloc (128);
  bf->nothing = "Bar Foo";
  bf->f = 24;
  bf->s = 91;

  end_func(21, "Param", bf, fb);
  free (bf->nothing);
  free (bf);
  return;
}
Example #2
0
int sdk_run()
{
    funca(1, 2);
    funcb(1, 2);
    pack();
    unpack();
}
Example #3
0
int main()
{
	funcb();
#if 0
	int a = 1; // 3 useless line will be removed by -O2 optimization
	int b = 1;
	a = b+1;
#endif
	// change puts() to __printf_chk() by -O2 optimization 
	printf("Hello World! gcc --save-temps\n");
	return 0;
}
Example #4
0
void testOptimizations()
{
	printf("Optimization stress test.\n\n");
	printf("Press any key to start assembling.\n\n");
	_getch();

	StressTest a(0, 1024, 0xFF, false, false, false);
	StressTest b(0, 1024, 0xFF, true, true, true);

	void (*funca)() = a.callable();
	void (*funcb)() = b.callable();

	funca();
	funcb();

	int x = a.instructionCount();
	int y = b.instructionCount();

	float optimization = 100.0f * (x - y) / y;

	int i;

	for(i = 0; i < 16; i++)
	{
		if(b.z[i] != b.y[i])
		{
			break;
		}

		if(b.z[i] != a.z[i])
		{
			break;
		}

		if(a.z[i] != a.y[i])
		{
			break;
		}
	}

	if(i == 16)
	{
		printf("Optimization stress test succesful. %f%% optimized.\n\n", optimization);
	}
	else
	{
		printf("Optimization test failed.\n\n");
	}
}
int Funktion::parseFunction(string func){
    string::iterator it;
    func = clearString(func);
    func = multiplicationSign(func);
    if(func=="")
        return 0;
    if(brackets(func)==false){
        return 1;
    }
    if(Funktion::validChars(func)==false){
        return 2;
    }
    int brackets = 0;
    for(int i=0;i<2;i++){
        for(it=func.end();it>=func.begin();it--){
            if(*it=='(')
                brackets--;
            if(*it==')')
                brackets++;
            if(*it==binaryFunction[i].at(0) && brackets==0 && *(it-1)!='/' && *(it-1)!='*' && *(it-1)!='-' && *(it-1)!='+'){
                Funktion a;
                Funktion b;
                if(it==func.begin()){
                    string funca(it+1,func.end());
                    int retVal = a.parseFunction(funca);
                    if(retVal==0){
                        function->insert(function,i,"");
                        function->insertTree(function->right,a.getFunction());
                    }
                    return retVal;
                }
                else if(it==func.end()){
                    return 3;
                }
                else{
                    string funca(func.begin(),it);
                    string funcb(it+1,func.end());
                    int retVal1 = a.parseFunction(funca);
                    int retVal2 = b.parseFunction(funcb);
                    if(retVal1==0 && retVal2==0){
                        function->insert(function,i,"");
                        function->insertTree(function->left,a.getFunction());
                        function->insertTree(function->right,b.getFunction());
                        return 0;
                    }
                    if(retVal1==0)
                        return retVal2;
                    if(retVal2==0)
                        return retVal1;
                    return -1;
                }
            }
        }
    }
    for(int i=2;i<sizeof(binaryFunction)/sizeof(binaryFunction[0]);i++){
        for(it=func.end();it>=func.begin();it--){
            if(*it=='(')
                brackets--;
            if(*it==')')
                brackets++;
            if(*it==binaryFunction[i].at(0) && brackets==0){
                Funktion a;
                Funktion b;
                if(it==func.begin()){
                    return 3;
                }
                else if(it==func.end()){
                    return 3;
                }
                else{
                    string funca(func.begin(),it);
                    string funcb(it+1,func.end());
                    int retVal1 = a.parseFunction(funca);
                    int retVal2 = b.parseFunction(funcb);
                    if(retVal1==0 && retVal2==0){
                        function->insert(function,i,"");
                        function->insertTree(function->left,a.getFunction());
                        function->insertTree(function->right,b.getFunction());
                        return 0;
                    }
                    if(retVal1==0)
                        return retVal2;
                    if(retVal2==0)
                        return retVal1;
                    return -1;
                }
            }
        }
    }
    it = func.begin();
    for(int i=0;i<sizeof(unaryFunction)/sizeof(unaryFunction[0]);i++){
        if(string(it,it+unaryFunction[i].length())==unaryFunction[i] && brackets==0){
            Funktion a;
            string funca(func,unaryFunction[i].length());
            int retVal = a.parseFunction(funca);
            if(retVal==0){
                function->insert(function,i+sizeof(binaryFunction)/sizeof(binaryFunction[0]),"");
                function->insertTree(function->left,a.getFunction());
            }
            return retVal;
        }
    }
    if(*it=='('){
        Funktion a;
        string funca(func.begin()+1,func.end()-1);
        int retVal = a.parseFunction(funca);
        if(retVal==0)
            function->insertTree(function,a.getFunction());
        return retVal;
    }
    if(*it=='x'){
        function->insert(function,-4,"x");
        return 0;
    }
    function->insert(function,-3,func);
    return 0;
}