kompiler 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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