From 47e3e503b8efe7b59811d8cabf6df935e6d650fd Mon Sep 17 00:00:00 2001 From: SpookyDervish <78246495+SpookyDervish@users.noreply.github.com> Date: Sun, 7 Sep 2025 13:38:16 +1000 Subject: [PATCH] COUNTING TO 100 MILLION TEST --- a.out | Bin 15960 -> 15776 bytes generators/x86_64.py | 151 +++++++++++++++++++++++++++++++++++++++++-- main.py | 5 +- out | Bin 4680 -> 4760 bytes out.asm | 37 ++++++++++- test | Bin 4680 -> 0 bytes test.c | 8 ++- test.o | Bin 576 -> 0 bytes test.s | 45 ------------- test2.grnd | 11 +++- 10 files changed, 198 insertions(+), 59 deletions(-) delete mode 100644 test delete mode 100644 test.o delete mode 100644 test.s diff --git a/a.out b/a.out index 193e80099b8636b43233288f84985a1e961cc397..43fbe8b854ae40c2f609c3057062b333dfa29e82 100644 GIT binary patch delta 1915 zcmZ`(T})g>6h3oz7g&Vdd--u$pxnE(2w2!3`P*Gs*rr{x`ciqQVpCIMib7ILiSVG7 z=!&g0P%S;iq_LW&QDb6!XlSCu#BPJOY4pV>u}=_VLZXHxYO*xw^~}99q-^53nfcCq z=bX7SXU@#ZnX9i|tZ7cFU`f&j815DdK@y@+PW>LJUl>>@&ADt-&b4qa=pJGAXaqGD zI`FNCk_cj2?o>oA*KRxH61&k*>~RZbm@fc9dj$QvF)RL+#U*w#;52M&A-0L2HoUAH z4*cIARq;m^-H!39)~=&p|1kZ9cDr`@$lK$k$MP>#cHz9ErJCCbP3^+Fj%GBR zHS8b`I(_W8)t}-$4o94<5w9y%c+Po#RH0b@IjlGa3N(@?aspGeV{RZDUohuxEWA%S zQYhQD$Rw4Bv7y;YUL;TQt17jjuIi^%}%<_ zRj>XAcU%@o{$rMZ*Yo(jTF;trU2SM>A_}JVA4$(76t1Sv|2kQgo=X(bV7=8e&Gi%1 z-FE$hA+2%Wom8Grc_+2a;kS~RRG!VGwpnI+8`l1IO>NAj@{1$d2Oi8S>LtV3%IX}w zE#&H?R-ZG?V}xyld<%VqhX|WCP4fz-jJaaPF>t8ZI){Cvc2fI_cookYd)ZaI zWmNhniOW#5Rf;K(dQLf5UNllxT(X$aI?Da>ELI;VaEgFN{IOlvhQvwvIYp8~7SvfD z1Hlj*#X-_%aUvMfvf`MEZ8r$xTJSIfjD&P8$M-|BWt!t09T+GYV*S)VjwRub>O62- z77{m;7}ON-0Bs;#?e~CO8@F+Jf*OMw+z9*Xsz6qeWuop3H6CqXAX4q9q&3GPDMtll zF%xO;sD_=(C<4B-Py>1W1Pv>sFnE~a)*=HZy6N&5-~)O-c1bhwD)DLoA0)m)@q)~t z4C)mAh4UOBo)%d7Iy^<1rud+wV8-V-&+nIE&n40dCy7^~25JiY4qAC|%twC4$D>PSh%RWrl?h$0xu0G zZt^IBgg47XEG%7R3DU9u;$xCk?}1tB53X|6Dpv{2@V+vzOwR=iH7h0?>n)np!`srn z;Q#fQ^ibJ2FGocJ~n7EctU2)rXBFTEkqr# zVe``@1nqvv*otT$v*?6b7Quddk^RurCw|E$l?}r~{cW$QDqS>Tm_(}Gg)3Z22 z*0?tZf-(OWjy2Z_rM%&tFd;_8Ni02Toc!S_yEVx4*RL9eF)+{SM#Wk54tUi2i0L;f zo`ojm-Ul8*_U3@@QC~4TNY2F$Ba@ty#~DO7Cw<9dawD@}U72(lmp$qX6MoGR^&O_Z zp$$G!?xZrTDrNV`NRg=>-N~0@S9LU#N3Tt~lgDDeVP!plV_NUS;#>I=c)aC>*x8vp zCi-qY^N(SqS^KGO@4I;?G0?AQGA(hbAV;2CXuU=b~`t0*Lem?tsM!-7^2U~P?I8)b;3 zJx_T}+LP<(cIP-#W8NR!0kN%O8~Jf3A#mxccaU#xfCXbpLsVDk3Oufd=?ol2dk#L< z!-+KCM}ELbktH{W!pt0A_j6R(alj<_F1W7mqZ&lRs+1?g6X5}AH3pwc+oWm*HsnTd zR=-!Gkom3C#BdF>geQ6h&R6>a=;Xsi+Dsi-Qc?^zs{JL~h&Z|2Nv6?Y(QydY_-sBl zxtexcA<4jOO;w$rh$lekzcGyhA}+t+FQ7qj%4xV#(^|S0S5PCkU~%EMFob+QPN|?H zf|h~`B}>uD6q1*SMHlhyT%XJ6#0_03cp?;q~f4-HQeeQ0C|OEmR^quiM2e;WR3_#kzv zv6s@1fJVaJ89pb0bC5tbkKHCrw-II|VVA~P4VEKKt}b5df?Dq>C?Z7aWd;g3DQ6 zvGf9SfbLR*=dx7dcnHjeM3Y*|4kznL+(4pXg(VF$ej5d_woCJhqbsnU#Rh*x$=28; zi@_xD4A3Sua19xJ+4y&YZvp=Z@Y*zo0vqV@Z1IZAw!*x@ztO{1(E5tV?W-kz-3**> zR^f8g84wEbqNLgDizx|-W>s=fC~w&0v^e*gdg diff --git a/generators/x86_64.py b/generators/x86_64.py index 1316760..db3d5e9 100644 --- a/generators/x86_64.py +++ b/generators/x86_64.py @@ -23,7 +23,7 @@ class X86_64Generator(Generator): self.lines.append("pop " + reg + "\n\t") self.stack_size -= 1 - def get_variable(self, var_name: str, reg: str, float: bool = False, offset: int = 0, no_stack_pop: bool = False): + def get_variable(self, var_name: str, reg: str, float: bool = False, offset: int = 0, no_stack_pop: bool = True): var = self.variables.get(var_name, None) var_pos = self.get_var_pos(var_name) try: @@ -47,6 +47,14 @@ class X86_64Generator(Generator): f"QWORD [rsp + {var_pos + offset}]" ) self.pop(reg) + elif var["type"] == BoolNode: + if no_stack_pop: + self.lines.append(f"mov {reg}, [rsp + {var_pos + offset}]\n\t") + else: + self.push( + f"QWORD [rsp + {var_pos + offset}]" + ) + self.pop(reg) except TypeError: # variable doesnt exist traceback(self.code, "NameError", f"\"{var_name}\" is not defined.") @@ -93,6 +101,9 @@ class X86_64Generator(Generator): self.lines.append(f"mov rax, {string_len[1:-1]}\n\t") self.push("rax") + elif type(starting_value) == BoolNode: + self.push("1" if starting_value.value else "0") + elif type(starting_value) == str: if starting_value.startswith("xmm"): # floating point stuff self.lines.append("sub rsp, 8\n\t") # make space @@ -131,6 +142,10 @@ class X86_64Generator(Generator): self.variables[var_name]["type"] = StringNode + elif type(new_value) == BoolNode: + self.lines.append(f"mov QWORD [rsp + {var_pos}], {"1" if new_value.value else "0"}\n\t") + self.variables[var_name]["type"] = BoolNode + elif type(new_value) == str: # we're changing a variable to the value of a register self.lines.append(f"mov QWORD [rsp + {var_pos}], {new_value}\n\t") self.variables[var_name]["type"] = IntNode @@ -150,14 +165,14 @@ class X86_64Generator(Generator): traceback(self.code, "TypeError", f"end expects an integer, not {node.arguments[0]}") self.lines.append("mov rax, 60\n\t") - if isinstance(node.arguments[0], IntNode): + if type(node.arguments[0]) in [IntNode,BoolNode]: self.lines.append("mov rdi, " + str(node.arguments[0].value) + "\n\t") elif isinstance(node.arguments[0], VarRefNode): var_type = self.get_variable(node.arguments[0].var_name, "rdi", no_stack_pop=True) if var_type == FloatNode: self.lines.append("cvttsd2si rdi, xmm0\n\t") else: - if var_type != IntNode: + if var_type not in [IntNode,BoolNode]: traceback(self.code, "TypeError", f"end expects an integer, not \"{var_type}\"") #self.lines.append("mov rdi, " + str(self.get_variable(node.arguments[0].var_name)) + "\n\t") self.lines.append("syscall\n\t") @@ -170,7 +185,7 @@ class X86_64Generator(Generator): traceback(self.code, "TypeError", "set expects only 2 arguments.") if not isinstance(node.arguments[0], VarPointerNode): traceback(self.code, "TypeError", f"the first argument of set should be a variable pointer, not \"{node.arguments[0]}\"") - if type(node.arguments[1]) not in [IntNode, VarRefNode, FloatNode, StringNode]: + if type(node.arguments[1]) not in [IntNode, VarRefNode, FloatNode, StringNode, BoolNode]: traceback(self.code, "TypeError", f"variables can't be of type \"{type(node.arguments[1])}\"") variable_exists = self.variables.get(node.arguments[0].var_name, None) != None @@ -420,10 +435,138 @@ class X86_64Generator(Generator): traceback(self.code, "TypeError", f"jump expects a label reference as the first argument, not \"{node.arguments[0]}\"") self.lines.append(f"jmp .{node.arguments[0].name}\n\t") + + elif node.instruction == "if": + if len(node.arguments) != 2: # example: "jump" or "jump $bool" + traceback(self.code, "TypeError", "if expects exactly 2 arguments.") + elif not type(node.arguments[0]) in [VarRefNode,BoolNode,StringNode,FloatNode,IntNode]: + traceback(self.code, "TypeError", f"if expects a value or variable refernce as the first argument, not \"{node.arguments[0]}\"") + elif not isinstance(node.arguments[1], LabelRefNode): + traceback(self.code, "TypeError", f"if expects a label reference as the second argument, not \"{node.arguments[1]}\"") + + + if isinstance(node.arguments[0], BoolNode): + if node.arguments[0].value: + self.lines.append(f"jmp .{node.arguments[1].name}\n\t") + #self.lines.append("mov eax, 1") + #self.lines.append(f"cmp eax, {1 if node.arguments[0].value else 0}") + elif type(node.arguments[0]) in [IntNode,FloatNode]: + if node.arguments[0].value != 0: + self.lines.append(f"jmp .{node.arguments[1].name}\n\t") + elif isinstance(node.arguments[0], VarRefNode): + self.get_variable(node.arguments[0].var_name, "eax") + self.lines.append(f"test eax, eax\n\t") + self.lines.append(f"jnz .{node.arguments[1].name}\n\t") + + elif node.instruction == "equal": + if len(node.arguments) != 3: # example: "equal" or "equal $bool" + traceback(self.code, "TypeError", "equal expects exactly 3 arguments.") + elif not type(node.arguments[0]) in [VarRefNode,BoolNode,FloatNode,IntNode]: + traceback(self.code, "TypeError", f"equal expects a value or variable refernce as the first argument, not \"{node.arguments[0].__repr__()}\"") + elif not type(node.arguments[1]) in [VarRefNode,BoolNode,FloatNode,IntNode]: + traceback(self.code, "TypeError", f"equal expects a value or variable refernce as the second argument, not \"{node.arguments[1].__repr__()}\"") + elif not isinstance(node.arguments[2], VarPointerNode): + traceback(self.code, "TypeError", f"the third argument of equal should be a variable pointer, not \"{node.arguments[2].__repr__()}\"") + + arg1 = None + arg2 = None + + if isinstance(node.arguments[0], BoolNode): + self.lines.append(f"mov rax, {int(node.arguments[0].value)}\n\t") + arg1 = "rax" + elif isinstance(node.arguments[0], IntNode): + self.lines.append(f"mov rax, {node.arguments[0].value}\n\t") + arg1 = "rax" + elif isinstance(node.arguments[0], FloatNode): + const_name = self.add_constant(node.arguments[0].value) + self.lines.append(f"movsd xmm0, {const_name}\n\t") + arg1 = "xmm0" + elif isinstance(node.arguments[0], VarRefNode): + self.get_variable(node.arguments[0].var_name, "rax") + arg1 = "rax" + + if isinstance(node.arguments[1], BoolNode): + self.lines.append(f"mov rbx, {int(node.arguments[1].value)}\n\t") + arg2 = "rbx" + elif isinstance(node.arguments[1], IntNode): + self.lines.append(f"mov rbx, {node.arguments[1].value}\n\t") + arg2 = "rbx" + elif isinstance(node.arguments[1], FloatNode): + const_name = self.add_constant(node.arguments[1].value) + self.lines.append(f"movsd xmm1, {const_name}\n\t") + arg2 = "xmm1" + elif isinstance(node.arguments[1], VarRefNode): + self.get_variable(node.arguments[1].var_name, "rbx") + arg2 = "rbx" + + self.lines.append(f"cmp {arg1}, {arg2}\n\t") + self.lines.append("sete al\n\t") + self.lines.append("movzx rax, al\n\t") + + var_name = node.arguments[2].var_name + if self.variables.get(var_name, None) == None: + self.create_variable(var_name, "rax", BoolNode) + else: + self.change_variable(var_name, "rax") + + elif node.instruction == "inequal": + if len(node.arguments) != 3: # example: "inequal" or "inequal $bool" + traceback(self.code, "TypeError", "inequal expects exactly 3 arguments.") + elif not type(node.arguments[0]) in [VarRefNode,BoolNode,FloatNode,IntNode]: + traceback(self.code, "TypeError", f"inequal expects a value or variable refernce as the first argument, not \"{node.arguments[0].__repr__()}\"") + elif not type(node.arguments[1]) in [VarRefNode,BoolNode,FloatNode,IntNode]: + traceback(self.code, "TypeError", f"inequal expects a value or variable refernce as the second argument, not \"{node.arguments[1].__repr__()}\"") + elif not isinstance(node.arguments[2], VarPointerNode): + traceback(self.code, "TypeError", f"the third argument of inequal should be a variable pointer, not \"{node.arguments[2].__repr__()}\"") + + arg1 = None + arg2 = None + + if isinstance(node.arguments[0], BoolNode): + self.lines.append(f"mov rax, {int(node.arguments[0].value)}\n\t") + arg1 = "rax" + elif isinstance(node.arguments[0], IntNode): + self.lines.append(f"mov rax, {node.arguments[0].value}\n\t") + arg1 = "rax" + elif isinstance(node.arguments[0], FloatNode): + const_name = self.add_constant(node.arguments[0].value) + self.lines.append(f"movsd xmm0, {const_name}\n\t") + arg1 = "xmm0" + elif isinstance(node.arguments[0], VarRefNode): + self.get_variable(node.arguments[0].var_name, "rax") + arg1 = "rax" + + if isinstance(node.arguments[1], BoolNode): + self.lines.append(f"mov rbx, {int(node.arguments[1].value)}\n\t") + arg2 = "rbx" + elif isinstance(node.arguments[1], IntNode): + self.lines.append(f"mov rbx, {node.arguments[1].value}\n\t") + arg2 = "rbx" + elif isinstance(node.arguments[1], FloatNode): + const_name = self.add_constant(node.arguments[1].value) + self.lines.append(f"movsd xmm1, {const_name}\n\t") + arg2 = "xmm1" + elif isinstance(node.arguments[1], VarRefNode): + self.get_variable(node.arguments[1].var_name, "rbx") + arg2 = "rbx" + + self.lines.append(f"cmp {arg1}, {arg2}\n\t") + self.lines.append("setne al\n\t") + self.lines.append("movzx rax, al\n\t") + + var_name = node.arguments[2].var_name + if self.variables.get(var_name, None) == None: + self.create_variable(var_name, "rax", BoolNode) + else: + self.change_variable(var_name, "rax") + else: self.lines.append("; FUCK\n\t") #raise NotImplementedError(f"A generate method hasn't been made for the \"{node.instruction}\" instruction.") + + + def write(self): with open(self.output_path + ".asm", "w") as f: diff --git a/main.py b/main.py index 40e198c..d3dd979 100644 --- a/main.py +++ b/main.py @@ -27,14 +27,15 @@ def main(): traceback(code, "fatal error", f"unkown architecture \"{arch}\"") generator.init() - compile_time = time()-start - print(f"Compiled in {round(compile_time, 3)} seconds.") system(f"nasm -felf64 {out_path}.asm") system(f"ld -m elf_{arch} -o {out_path} {out_path}.o") remove(out_path + ".o") #remove(out_path + ".asm") + compile_time = time()-start + print(f"Compiled in {round(compile_time, 3)} seconds.") + if __name__ == "__main__": main() diff --git a/out b/out index e04ac5886bd598099c0e05addc7922e6231404fa..b48ed6056b61beb391b55d29f876d08559165d6e 100644 GIT binary patch delta 245 zcmX@1GDCHO24loT&3w*S1_+4VxG^Cx;-!INiyD0>YF32&!Gi*f8|5Zf2q2wsod5s; diff --git a/out.asm b/out.asm index ddd38ec..e4e68af 100644 --- a/out.asm +++ b/out.asm @@ -4,8 +4,39 @@ section .data section .text global _start _start: + ; InstructionNode(instruction='set', parent=RootNode(statements=[..., InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Boolean]), LabelDecleration, InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='inequal', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='if', parent=..., arguments=[VariableReference, LabelReference]), InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[VariablePointer, Int]) + mov rax, 0 + push rax + ; InstructionNode(instruction='set', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), ..., InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Boolean]), LabelDecleration, InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='inequal', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='if', parent=..., arguments=[VariableReference, LabelReference]), InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[VariablePointer, Int]) + mov rax, 0 + push rax + ; InstructionNode(instruction='set', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), ..., LabelDecleration, InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='inequal', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='if', parent=..., arguments=[VariableReference, LabelReference]), InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[VariablePointer, Boolean]) + push 1 ; LabelDecleration - .myLabel: - ; InstructionNode(instruction='jump', parent=RootNode(statements=[LabelDecleration, ...]), arguments=[LabelReference]) - jmp .myLabel + .loop: + ; InstructionNode(instruction='add', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Boolean]), LabelDecleration, ..., InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='inequal', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='if', parent=..., arguments=[VariableReference, LabelReference]), InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[Int, VariableReference, VariablePointer]) + mov rax, 1 + mov rbx, [rsp + 16] + add rax, rbx + mov QWORD [rsp + 16], rax + ; InstructionNode(instruction='add', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Boolean]), LabelDecleration, InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), ..., InstructionNode(instruction='inequal', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='if', parent=..., arguments=[VariableReference, LabelReference]), InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[Int, VariableReference, VariablePointer]) + mov rax, 1 + mov rbx, [rsp + 8] + add rax, rbx + mov QWORD [rsp + 8], rax + ; InstructionNode(instruction='inequal', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Boolean]), LabelDecleration, InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), ..., InstructionNode(instruction='if', parent=..., arguments=[VariableReference, LabelReference]), InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[Int, VariableReference, VariablePointer]) + mov rax, 100000 + mov rbx, [rsp + 16] + cmp rax, rbx + setne al + movzx rax, al + mov QWORD [rsp + 0], rax + ; InstructionNode(instruction='if', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Boolean]), LabelDecleration, InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='inequal', parent=..., arguments=[Int, VariableReference, VariablePointer]), ..., InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[VariableReference, LabelReference]) + mov eax, [rsp + 0] + test eax, eax + jnz .loop + ; InstructionNode(instruction='end', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Boolean]), LabelDecleration, InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='add', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='inequal', parent=..., arguments=[Int, VariableReference, VariablePointer]), InstructionNode(instruction='if', parent=..., arguments=[VariableReference, LabelReference]), ...]), arguments=[VariableReference]) + mov rax, 60 + mov rdi, [rsp + 8] + syscall \ No newline at end of file diff --git a/test b/test deleted file mode 100644 index 3cd462875ab21365f8b544c2ab9c7cfbd728434a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4680 zcmeI0u}Z{15QhJYiJT%B8xcfMu(3&PA(BQb-yv+cfW@7~?G{@3I+m8#`7AzyPoOiq zGcg7Na`h}^|DAtkvf)d$`+E0qpUq~_k>M6GD(h&a8JHhw1yJJ}8O;UqSeyT*Xr&!V z-zBGtG8w!_!AprD`>7tJGN|@-;+q%&BVYuKfDtePM!*Od0V7}pjDQg^0{Jp>lqO zYU$c;iKc12Z+vj;fTmlx;7FbpK;>Un!L_7eo%B&xp?eO0zGC~}lv*qI=>?*vm%xuX-mfc)#J`|HAJbk5B2p7$wI2KhS0< AYybcN diff --git a/test.c b/test.c index 23704de..43e6f6a 100644 --- a/test.c +++ b/test.c @@ -1,5 +1,7 @@ -#include int main() { - printf("Hello, World!\n"); - return 0; + int lol = 0; + for (int i = 0; i != 100000000; i++) { + lol++; + } + return lol; } \ No newline at end of file diff --git a/test.o b/test.o deleted file mode 100644 index 19dab4615d992cb197e884d239336f6b2abebdb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 576 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-stPD&@qU13_c7ZS(n)U{$BY4on1GLos$UUJ4k`>66$G-d`QiXnVFFYo3y=n34k%v&N=pK1Z1yWa4F#Ex4AAZ0 zVFQ%i&jlp-S;6Y`N>VFI81#xWic5-05|e