The cdecl calling convention: 1. arguments are passed on the stack, right to left. 2. int values and pointer values are returned in %eax. 3. floats are returned in %st(0). 4. when calling a function, %st(0) ~ %st(7) are all free. 5. functions are free to use %eax, %ecx, %edx, because caller needs to save them. 6. stack must be aligned to 4 bytes (before gcc 4.5, for gcc 4.5+, aligned to 16 bytes).
コード例 #1
0
 public static Expr Create(Expr left, Expr right) => new Modulo(left, right);
コード例 #2
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public IfElseStmt(Expr cond, Stmt trueStmt, Stmt falseStmt) {
     this.Cond = cond;
     this.TrueStmt = trueStmt;
     this.FalseStmt = falseStmt;
 }
コード例 #3
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 private CaseStmt(Expr expr, Stmt stmt) {
     this.Expr = expr;
     this.Stmt = stmt;
 }
コード例 #4
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public SwitchStmt(Expr expr, Stmt stmt) {
     this.Expr = expr;
     this.Stmt = stmt;
 }
コード例 #5
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public IfStmt(Expr cond, Stmt stmt) {
     this.Cond = cond;
     this.Stmt = stmt;
 }
コード例 #6
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public WhileStmt(Expr cond, Stmt body) {
     this.Cond = cond;
     this.Body = body;
 }
コード例 #7
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public DoWhileStmt(Stmt body, Expr cond) {
     this.Body = body;
     this.Cond = cond;
 }
コード例 #8
0
 private Greater(Expr left, Expr right)
     : base(left, right) { }
コード例 #9
0
 private NotEqual(Expr left, Expr right)
     : base(left, right) { }
コード例 #10
0
 public static Expr Create(Expr left, Expr right) => new RShift(left, right);
コード例 #11
0
 private Less(Expr left, Expr right)
     : base(left, right) { }
コード例 #12
0
 private RShift(Expr left, Expr right)
     : base(left, right) { }
コード例 #13
0
 private Sub(Expr left, Expr right)
     : base(left, right) { }
コード例 #14
0
 private Add(Expr left, Expr right)
     : base(left, right) { }
コード例 #15
0
 protected BinaryArithmeticOp(Expr left, Expr right)
     : base(left, right) { }
コード例 #16
0
 public static Expr Create(Expr left, Expr right) => new NotEqual(left, right);
コード例 #17
0
 protected BinaryOp(Expr left, Expr right) {
     this.Left = left;
     this.Right = right;
 }
コード例 #18
0
 private Xor(Expr left, Expr right)
     : base(left, right) { }
コード例 #19
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public static Stmt Create(Expr cond, Stmt body) =>
     new WhileStmt(cond, body);
コード例 #20
0
 public static Expr Create(Expr left, Expr right) => new Xor(left, right);
コード例 #21
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public static Stmt Create(Stmt body, Expr cond) =>
     new DoWhileStmt(body, cond);
コード例 #22
0
 private BitwiseOr(Expr left, Expr right)
     : base(left, right) { }
コード例 #23
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public static Stmt Create(Expr expr, Stmt stmt) =>
     new SwitchStmt(expr, stmt);
コード例 #24
0
 public static Expr Create(Expr left, Expr right) => new BitwiseOr(left, right);
コード例 #25
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public static Stmt Create(Expr cond, Stmt stmt) =>
     new IfStmt(cond, stmt);
コード例 #26
0
 private LogicalOr(Expr left, Expr right)
     : base(left, right) { }
コード例 #27
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public static Stmt Create(Expr cond, Stmt trueStmt, Stmt falseStmt) =>
     new IfElseStmt(cond, trueStmt, falseStmt);
コード例 #28
0
 public static Expr Create(Expr left, Expr right) =>
     new LogicalOr(left, right);
コード例 #29
0
ファイル: Statements.cs プロジェクト: phisiart/C-Compiler
 public static Stmt Create(Expr expr, Stmt stmt) =>
     new CaseStmt(expr, stmt);
コード例 #30
0
 private Modulo(Expr left, Expr right)
     : base(left, right) { }