repos / gbc

GBC - Go B Compiler
git clone https://github.com/xplshn/gbc.git

gbc / examples
xplshn  ·  2025-08-13

matrixMath.bx

Bx
 1extrn printf;
 2
 3void print_vec(label string, v []int) {
 4    printf("%s: [%d, %d]\n", label, v[0], v[1]);
 5}
 6
 7void print_mat(label string, m []int) {
 8    printf("%s: [[%d, %d], [%d, %d]]\n", label, m[0], m[1], m[2], m[3]);
 9}
10
11void vec_add(v1, v2, out_v []int) {
12    out_v[0] = v1[0] + v2[0];
13    out_v[1] = v1[1] + v2[1];
14}
15
16int vec_dot(v1, v2 []int) {
17    //return (v1[0] * v2[0]) + (v1[1] * v2[1]);
18    return ((v1[0] * v2[0]) + (v1[1] * v2[1]));
19}
20
21void mat_vec_mult(m, v, out_v []int) {
22    out_v[0] = (m[0] * v[0]) + (m[1] * v[1]);
23    out_v[1] = (m[2] * v[0]) + (m[3] * v[1]);
24}
25
26void mat_mult(m1, m2, out_m []int) {
27    out_m[0] = (m1[0] * m2[0]) + (m1[1] * m2[2]);
28    out_m[1] = (m1[0] * m2[1]) + (m1[1] * m2[3]);
29    out_m[2] = (m1[2] * m2[0]) + (m1[3] * m2[2]);
30    out_m[3] = (m1[2] * m2[1]) + (m1[3] * m2[3]);
31}
32
33int main() {
34    int vec_a[2];
35    int vec_b[2];
36    int vec_result[2];
37    int dot_product;
38
39    int matrix_T[4];
40    int matrix_R[4];
41    int matrix_TR[4];
42
43    printf("--- Vector & Matrix Math Demo ---\n");
44
45    vec_a[0] = 3; vec_a[1] = 5;
46    vec_b[0] = -2; vec_b[1] = 4;
47    print_vec("Vector A", vec_a);
48    print_vec("Vector B", vec_b);
49
50    printf("\n--- Vector Operations ---\n");
51    vec_add(vec_a, vec_b, vec_result);
52    print_vec("A + B", vec_result);
53
54    dot_product = vec_dot(vec_a, vec_b);
55    printf("A . B: %d\n", dot_product);
56
57    printf("\n--- Matrix Operations ---\n");
58
59    matrix_R[0] = 0;  matrix_R[1] = 1;
60    matrix_R[2] = -1; matrix_R[3] = 0;
61    print_mat("Rotation Matrix R", matrix_R);
62
63    matrix_T[0] = 2;  matrix_T[1] = 0;
64    matrix_T[2] = 0;  matrix_T[3] = 3;
65    print_mat("Scaling Matrix T", matrix_T);
66
67    mat_vec_mult(matrix_R, vec_a, vec_result);
68    print_vec("R * A", vec_result);
69
70    mat_mult(matrix_T, matrix_R, matrix_TR);
71    print_mat("T * R", matrix_TR);
72
73    mat_vec_mult(matrix_TR, vec_b, vec_result);
74    print_vec("(T * R) * B", vec_result);
75
76    return (0);
77}