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 +4 -4
- data/bin/kompile +1 -2
- data/lib/kompiler/architectures/armv8a/instructions.rb +16 -0
- data/lib/kompiler/mc_builder.rb +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d412abafd669fc13a7c7f04607dc0024cb63054f2a12f442ea8da3beea17119e
|
4
|
+
data.tar.gz: 43120f2bd913622cdd7037efa9ae2f520fb5fbf5cbe0799dd511fa48845523cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
#
|
data/lib/kompiler/mc_builder.rb
CHANGED
@@ -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.
|
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-
|
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
|