#include "include/gravity/core.h" #include int main(void) { // define program GravityModule module = gravityCreateModule(); GravityBuilder builder = gravityCreateBuilder(); GravityType charType = gravityCreateIntegerType(8, false); GravityType mainFuncType = gravityCreateFunctionType(0, NULL, charType); GravityFunction mainFunc = gravityNewFunction(module, "main", mainFuncType); GravityBlock entryBlock = gravityStartBlock("entry", mainFunc); /* // define blocks GravityBlock thenBlock = gravityStartBlock("then", mainFunc); gravityAppendBlockArgument(thenBlock, ptrType); GravityBlock elseBlock = gravityStartBlock("else", mainFunc); gravityAppendBlockArgument(elseBlock, ptrType); GravityBlock mergeBlock = gravityStartBlock("merge", mainFunc); gravityAppendBlockArgument(mergeBlock, ptrType); // write entry gravityBuilderSwitchToBlock(builder, entryBlock); GravityValue x = gravityBuildAlloc(builder, charType, "x"); GravityValue oneConst = gravityBuildIntConstant(builder, charType, 1, "true"); gravityBuildBr(builder, oneConst, thenBlock, (GravityValue[]){x}, elseBlock, (GravityValue[]){x}); // then block gravityBuilderSwitchToBlock(builder, thenBlock); GravityValue thenValue = gravityGetBlockArg(thenBlock, 0); GravityValue fiveConst = gravityBuildIntConstant(builder, charType, 5, "five"); gravityBuildStore(builder, thenValue, fiveConst); gravityBuildJump(builder, mergeBlock, (GravityValue[]){thenValue}); // else block gravityBuilderSwitchToBlock(builder, elseBlock); GravityValue elseValue = gravityGetBlockArg(elseBlock, 0); GravityValue tenConst = gravityBuildIntConstant(builder, charType, 10, "ten"); gravityBuildStore(builder, elseValue, tenConst); gravityBuildJump(builder, mergeBlock, (GravityValue[]){elseValue}); // merge block gravityBuilderSwitchToBlock(builder, mergeBlock); GravityValue xVar = gravityGetBlockArg(mergeBlock, 0); GravityValue xValue = gravityBuildLoad(builder, xVar, "xValue"); gravityBuildRet(builder, xValue);*/ gravityBuilderSwitchToBlock(builder, entryBlock); GravityValue returnVal = gravityBuildIntConstant(builder, charType, 123, NULL); gravityBuildRet(builder, returnVal); printf("%s\n", gravityFunctionToCStr(mainFunc)); GravityTargetArch target = gravityCreate_x86_64Target(); char* outputASM = gravityTargetEmitModule(target, module); printf("%s\n", outputASM); return 0; }