kompiler 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 022b76028fd6326e384fe0dd41aaee6308f7e1342ccf19f975be42d89bef9368
4
- data.tar.gz: feab74609dc0f512e9a03be164eb804ab94b4f698c9437dca48bdea2cf7381c3
3
+ metadata.gz: d412abafd669fc13a7c7f04607dc0024cb63054f2a12f442ea8da3beea17119e
4
+ data.tar.gz: 43120f2bd913622cdd7037efa9ae2f520fb5fbf5cbe0799dd511fa48845523cc
5
5
  SHA512:
6
- metadata.gz: e64807ccfbd43ecc9a51436402e374ec5dcd270f38aaab48e320e7a1a956ae362f9e34dfea352d0d1003d5571118a047905c551572fda3d9bcd758935e824ca5
7
- data.tar.gz: 28a24f998d1f8fe7d789314ce3768c3399579b14dd7aca43da103f46148dcc9a21521360fc28b673c4b3585acdaaf5cd3e3f93431e6b8f17ba4f8304d3e08c1a
6
+ metadata.gz: 8275ceed8672bcf4935bc43b53a3a96c12b287070760a9ab098a57aa711c2f3072384287615523f2461dd81fc451f1c6c6931f655a65066504c2645de3adc85b
7
+ data.tar.gz: 9f8723794b94852affd38e541a4b9c2ff2b85a3f3d83ab66c3abfd74a11dfa45bf32b4cee564eddc37105e5ec13436af939cc26da7e774f5d9fe4611af3a0ded
data/bin/kompile CHANGED
@@ -18,8 +18,7 @@ require 'kompiler'
18
18
 
19
19
  # Print the help screen if requested
20
20
  if (ARGV.size == 1) && ["--help", "-h"].include?(ARGV[0])
21
- puts """
22
- Usage: kompile [options] | [<input_file> <output_file> [architecture]]
21
+ puts """Usage: kompile [options] | [<input_file> <output_file> [architecture]]
23
22
 
24
23
  Available options:
25
24
  --help, -h Prints this screen
@@ -451,6 +451,22 @@ end
451
451
  bitsize: 32
452
452
  },
453
453
 
454
+ {
455
+ keyword: "mul",
456
+ name: "MUL",
457
+ description: "Multiply the contents of two registers and store the output in the destination register.",
458
+ operands: [{type: "register", restrictions: {reg_type: "gpr"}}, {type: "register", restrictions: {reg_type: "gpr"}}, {type: "register", restrictions: {reg_type: "gpr"}}],
459
+ mc_constructor: [
460
+ ["get_bits", ["encode_gp_register", ["get_operand", 0]], 0, 5], # Rd
461
+ ["get_bits", ["encode_gp_register", ["get_operand", 1]], 0, 5], # Rn
462
+ ["bits", 1,1,1,1,1, 0], # Ra o0
463
+ ["get_bits", ["encode_gp_register", ["get_operand", 2]], 0, 5], # Rm
464
+ ["bits", 0,0,0, 1,1,0,1,1, 0,0],
465
+ ["if_eq_else", ["get_key", ["get_operand", 0], :reg_size], 64, ["bits", 1], []], # SF = 1 if 64-bit
466
+ ["if_eq_else", ["get_key", ["get_operand", 0], :reg_size], 32, ["bits", 0], []], # SF = 0 if 32-bit
467
+ ],
468
+ bitsize: 32
469
+ },
454
470
 
455
471
 
456
472
  #
@@ -29,6 +29,7 @@ MC_AST_NODES = [
29
29
  {name: "bits", n_args: "any", func: lambda {|args, state| args } },
30
30
  {name: "if_eq_else", n_args: 4, eval_args: false, func: lambda {|args, state| (eval_mc_node_arg(args[0], state) == eval_mc_node_arg(args[1], state)) ? eval_mc_node_arg(args[2], state) : eval_mc_node_arg(args[3], state) }},
31
31
  {name: "raise_error", n_args: 1, func: lambda {|args, state| raise args[0] } },
32
+ {name: "get_key", n_args: 2, func: lambda {|args, state| args[0][args[1]] }},
32
33
  ]
33
34
 
34
35
  def self.is_ast_node(val)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kompiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyryl Shyshko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-25 00:00:00.000000000 Z
11
+ date: 2024-11-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: 'Kompiler is a low-level, modular and extendable compiler for any architecture.
14
14
  By default Kompiler supports ARMv8-a, but other architecture extensions can be downloaded