KCC - Kayte C Compiler 1.10.0
A C compiler implementation with preprocessor, lexer, parser, and code generator
Loading...
Searching...
No Matches
codegen.c File Reference

Code generation module for KCC compiler. More...

#include "kcc.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

Go to the source code of this file.

Functions

CodeGeneratorcodegen_create (const char *output_filename)
void codegen_destroy (CodeGenerator *codegen)
void codegen_emit (CodeGenerator *codegen, const char *format,...)
char * codegen_new_label (CodeGenerator *codegen)
char * codegen_new_temp (CodeGenerator *codegen)
bool codegen_generate (CodeGenerator *codegen, ASTNode *ast)
void codegen_program (CodeGenerator *codegen, ASTNode *node)
void codegen_function_declaration (CodeGenerator *codegen, ASTNode *node)
void codegen_variable_declaration (CodeGenerator *codegen, ASTNode *node)
void codegen_statement (CodeGenerator *codegen, ASTNode *node)
void codegen_compound_statement (CodeGenerator *codegen, ASTNode *node)
void codegen_expression_statement (CodeGenerator *codegen, ASTNode *node)
void codegen_return_statement (CodeGenerator *codegen, ASTNode *node)
void codegen_if_statement (CodeGenerator *codegen, ASTNode *node)
void codegen_while_statement (CodeGenerator *codegen, ASTNode *node)
void codegen_for_statement (CodeGenerator *codegen, ASTNode *node)
void codegen_expression (CodeGenerator *codegen, ASTNode *node)
void codegen_binary_expression (CodeGenerator *codegen, ASTNode *node)
void codegen_unary_expression (CodeGenerator *codegen, ASTNode *node)
void codegen_call_expression (CodeGenerator *codegen, ASTNode *node)
void codegen_identifier (CodeGenerator *codegen, ASTNode *node)
void codegen_number (CodeGenerator *codegen, ASTNode *node)
void codegen_string (CodeGenerator *codegen, ASTNode *node)
void codegen_assignment (CodeGenerator *codegen, ASTNode *node)

Detailed Description

Code generation module for KCC compiler.

Author
KCC Development Team
Version
1.10.0
Date
2024

This module implements code generation for the KCC compiler, supporting multiple target architectures (ARM64 and x86-64). It translates Abstract Syntax Tree (AST) nodes into native assembly code for the target platform.

Architecture Support

  • ARM64 (Apple Silicon): Modern ARM 64-bit architecture
  • x86-64 (Intel/AMD): Traditional 64-bit x86 architecture

The code generator automatically detects the target architecture at compile time and generates appropriate assembly code using platform-specific instructions, registers, and calling conventions.

Features

  • Multi-architecture code generation
  • Function call support with proper calling conventions
  • Arithmetic and logical operations
  • Control flow (if/else, loops)
  • Variable storage and retrieval
  • Label generation for jumps and branches

Usage Example

// Create code generator
CodeGenerator *codegen = codegen_create("output.s");
// Generate code from AST
if (codegen_generate(codegen, ast_root)) {
printf("Code generation successful\n");
}
// Clean up
codegen_destroy(codegen);
CodeGenerator structure.
Definition types.h:528

Definition in file codegen.c.

Function Documentation

◆ codegen_assignment()

void codegen_assignment ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 617 of file codegen.c.

◆ codegen_binary_expression()

void codegen_binary_expression ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 458 of file codegen.c.

◆ codegen_call_expression()

void codegen_call_expression ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 556 of file codegen.c.

◆ codegen_compound_statement()

void codegen_compound_statement ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 273 of file codegen.c.

◆ codegen_create()

CodeGenerator * codegen_create ( const char * output_filename)

Definition at line 59 of file codegen.c.

◆ codegen_destroy()

void codegen_destroy ( CodeGenerator * codegen)

Definition at line 79 of file codegen.c.

◆ codegen_emit()

void codegen_emit ( CodeGenerator * codegen,
const char * format,
... )

Definition at line 88 of file codegen.c.

◆ codegen_expression()

void codegen_expression ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 423 of file codegen.c.

◆ codegen_expression_statement()

void codegen_expression_statement ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 281 of file codegen.c.

◆ codegen_for_statement()

void codegen_for_statement ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 380 of file codegen.c.

◆ codegen_function_declaration()

void codegen_function_declaration ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 177 of file codegen.c.

◆ codegen_generate()

bool codegen_generate ( CodeGenerator * codegen,
ASTNode * ast )

Definition at line 116 of file codegen.c.

◆ codegen_identifier()

void codegen_identifier ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 582 of file codegen.c.

◆ codegen_if_statement()

void codegen_if_statement ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 317 of file codegen.c.

◆ codegen_new_label()

char * codegen_new_label ( CodeGenerator * codegen)

Definition at line 96 of file codegen.c.

◆ codegen_new_temp()

char * codegen_new_temp ( CodeGenerator * codegen)

Definition at line 106 of file codegen.c.

◆ codegen_number()

void codegen_number ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 594 of file codegen.c.

◆ codegen_program()

void codegen_program ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 163 of file codegen.c.

◆ codegen_return_statement()

void codegen_return_statement ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 289 of file codegen.c.

◆ codegen_statement()

void codegen_statement ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 238 of file codegen.c.

◆ codegen_string()

void codegen_string ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 604 of file codegen.c.

◆ codegen_unary_expression()

void codegen_unary_expression ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 521 of file codegen.c.

◆ codegen_variable_declaration()

void codegen_variable_declaration ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 219 of file codegen.c.

◆ codegen_while_statement()

void codegen_while_statement ( CodeGenerator * codegen,
ASTNode * node )

Definition at line 350 of file codegen.c.