[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[COMMITTED] pkl: gen: move compiler built-ins to a RAS file
From: |
Jose E. Marchesi |
Subject: |
[COMMITTED] pkl: gen: move compiler built-ins to a RAS file |
Date: |
Fri, 24 Dec 2021 13:54:06 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
2021-12-24 Jose E. Marchesi <jemarch@gnu.org>
* libpoke/pkl-gen-builtins.pks: New file.
* libpoke/Makefile.am (libpoke_la_SOURCES): Add
pkl-gen-builtins.pks and pkl-gen-builtins.pkc.
(MOSTLYCLEANFILES): Add pkl-gen-builtins.pkc.tmp.
(BUILT_SOURCES): Add pkl-gen-builtins.pkc.
* libpoke/pkl-gen.c (pkl_gen_ps_comp_stmt): Use the RAS
implementations of the compiler built-ins.
---
ChangeLog | 10 +
libpoke/Makefile.am | 10 +-
libpoke/pkl-gen-builtins.pks | 485 +++++++++++++++++++++++++++++++++++++++++++
libpoke/pkl-gen.c | 207 ++++--------------
4 files changed, 541 insertions(+), 171 deletions(-)
create mode 100644 libpoke/pkl-gen-builtins.pks
diff --git a/ChangeLog b/ChangeLog
index 7054c953..ad1af792 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2021-12-24 Jose E. Marchesi <jemarch@gnu.org>
+
+ * libpoke/pkl-gen-builtins.pks: New file.
+ * libpoke/Makefile.am (libpoke_la_SOURCES): Add
+ pkl-gen-builtins.pks and pkl-gen-builtins.pkc.
+ (MOSTLYCLEANFILES): Add pkl-gen-builtins.pkc.tmp.
+ (BUILT_SOURCES): Add pkl-gen-builtins.pkc.
+ * libpoke/pkl-gen.c (pkl_gen_ps_comp_stmt): Use the RAS
+ implementations of the compiler built-ins.
+
2021-12-23 Jose E. Marchesi <jemarch@gnu.org>
* pickles/asn1-ber.pk (BER_Identifier): Add integrity checks for
diff --git a/libpoke/Makefile.am b/libpoke/Makefile.am
index 428cd827..e7849396 100644
--- a/libpoke/Makefile.am
+++ b/libpoke/Makefile.am
@@ -47,8 +47,8 @@ libpoke_la_SOURCES = libpoke.h libpoke.c \
pkl-asm.h pkl-asm.c \
pkl-diag.h pkl-diag.c \
pkl-parser.h pkl-parser.c \
- pkl-gen.pks pkl-asm.pks \
- pkl-gen.pkc pkl-asm.pkc \
+ pkl-gen.pks pkl-asm.pks pkl-gen-builtins.pks \
+ pkl-gen.pkc pkl-asm.pkc pkl-gen-builtins.pkc \
pkl-insn.def pkl-ops.def pkl-attrs.def \
pvm.h pvm.c \
pvm-val.c pvm-val.h \
@@ -85,12 +85,12 @@ endif HAVE_PROC
srcdir=$(srcdir) $(RAS_AWK) -f $(srcdir)/ras $< > $$outfile.tmp \
&& mv $$outfile.tmp $(srcdir)/$$outfile
-pkl-gen.pkc pkl-asm.pkc: $(srcdir)/ras $(srcdir)/pkl-insn.def
-MOSTLYCLEANFILES += pkl-gen.pkc.tmp pkl-asm.pkc.tmp
+pkl-gen.pkc pkl-gen-builtins.pkc pkl-asm.pkc: $(srcdir)/ras
$(srcdir)/pkl-insn.def
+MOSTLYCLEANFILES += pkl-gen.pkc.tmp pkl-gen-builtins.pkc.tmp pkl-asm.pkc.tmp
EXTRA_DIST = ras
-BUILT_SOURCES = pkl-gen.pkc pkl-asm.pkc
+BUILT_SOURCES = pkl-gen.pkc pkl-gen-builtins.pkc pkl-asm.pkc
AM_LFLAGS = -d
# The Automake generated .l.c rule is broken: When executed in a VPATH build,
diff --git a/libpoke/pkl-gen-builtins.pks b/libpoke/pkl-gen-builtins.pks
new file mode 100644
index 00000000..615d7780
--- /dev/null
+++ b/libpoke/pkl-gen-builtins.pks
@@ -0,0 +1,485 @@
+;;; -*- mode: poke-ras -*-
+;;; pkl-gen-builtins.pks - Built-in bodies
+
+;;; Copyright (C) 2021 Jose E. Marchesi
+
+;;; This program is free software: you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation, either version 3 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; This program is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY ; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with this program. If not, see <http: //www.gnu.org/licenses/>.
+
+;;; This file contains the bodies of the several compiler built-ins.
+;;; Note that each macro should expand to the body of a function,
+;;; and handle its arguments and return value whenever necessary.
+
+;;; RAS_MACRO_BUILTIN_RAND
+;;;
+;;; Body of the `rand' compiler built-in with prototype
+;;; (uint<32> seed = 0) int<32>
+
+ .macro builtin_rand
+ pushvar 0, 0
+ rand
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_GET_ENDIAN
+;;;
+;;; Body of the `get_endian' compiler built-in with protype
+;;; () int<32>
+
+ .macro builtin_get_endian
+ pushend
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_SET_ENDIAN
+;;;
+;;; Body of the `set_endian' compiler built-in with prototype
+;;; (int<32> endian) int<32>
+
+ .macro builtin_set_endian
+ pushvar 0, 0
+ popend
+ ;; Always return `true' to facilitate using this function
+ ;; in struct constraint expressions.
+ push int<32>1
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_GET_IOS
+;;;
+;;; Body of the `get_ios' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_get_ios
+ pushios
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_SET_IOS
+;;;
+;;; Body of the `set_ios' compiler built-in with prototype
+;;; (int<32> ios) int<32>
+
+ .macro builtin_set_ios
+ pushvar 0, 0
+ popios
+ ;; Always return `true' to facilitate using this function
+ ;; in struct constraint expressions.
+ push int<32>1
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_OPEN
+;;;
+;;; Body of the `open' compiler built-in with prototype
+;;; (string handler, uint<64> flags = 0) int<32>
+
+ .macro builtin_open
+ pushvar 0, 0
+ pushvar 0, 1
+ open
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_CLOSE
+;;;
+;;; Body of the `close' compiler built-in with prototype
+;;; (int<32> ios) void
+
+ .macro builtin_close
+ pushvar 0, 0
+ close
+ .end
+
+;;; RAS_MACRO_BUILTIN_IOSIZE
+;;;
+;;; Body of the `iosize' compiler built-in with prototype
+;;; (int<32> ios = get_ios) offset<uint<64>,8>
+
+ .macro builtin_iosize
+ pushvar 0, 0
+ iosize
+ nip
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_IOFLAGS
+;;;
+;;; Body of the `iosize' compiler built-in with prototype
+;;; (int<32> ios = get_ios) uint<64>
+
+ .macro builtin_ioflags
+ pushvar 0, 0
+ ioflags
+ nip
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_IOBIAS
+;;;
+;;; Body of the `iobias' compiler built-in with prototype
+;;; (int<32> ios = get_ios) offset<uint<64>,1>
+
+ .macro builtin_iobias
+ pushvar 0, 0
+ iogetb
+ nip
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_IOSETBIAS
+;;;
+;;; Body of the `iosetbias' compiler built-in with prototype
+;;; (offset<uint<64>,1> bias = 0#1, int<32>
+
+ .macro builtin_iosetbias
+ pushvar 0, 0
+ pushvar 0, 1
+ iosetb
+ nip
+ .end
+
+;;; RAS_MACRO_BUILTIN_FLUSH
+;;;
+;;; Body of the `flush' compiler built-in with prototype
+;;; (int<32> ios, offset<uint<64>,1> offset) void:
+
+ .macro builtin_flush
+ pushvar 0, 0
+ pushvar 0, 1
+ ogetm
+ nip
+ flush
+ .end
+
+;;; RAS_MACRO_BUILTIN_GET_TIME
+;;;
+;;; Body of the `get_time' compiler built-in with prototype
+;;; () int<64>[2]
+
+ .macro builtin_get_time
+ time
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_SLEEP
+;;;
+;;; Body of the `sleep' compiler built-in with prototype
+;;; (int<64> sec, int<64> nsec = 0) void
+
+ .macro builtin_sleep
+ pushvar 0, 0
+ pushvar 0, 1
+ sleep
+ drop
+ drop
+ .end
+
+;;; RAS_MACRO_BUILTIN_STRACE
+;;;
+;;; Body of the `strace' compiler built-in with prototype
+;;; () void
+
+ .macro builtin_strace
+ strace 0
+ .end
+
+;;; RAS_MACRO_BUILTIN_GETENV
+;;;
+;;; Body of the `getenv' compiler built-in with prototype
+;;; (string name) string
+
+ .macro builtin_getenv
+ pushvar 0, 0
+ getenv
+ nip
+ bnn .env_var_found
+ push PVM_E_INVAL
+ raise
+.env_var_found:
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_GET_COLOR_BGCOLOR
+;;;
+;;; Body of the `term_get_color' and `term_get_bgcolor' compiler
+;;; built-in with prototypes
+;;; () int<32>[3]
+;;;
+;;; This macro requires the C variable `comp_stmt_builtin' defined to
+;;; either PKL_AST_BUILTIN_TERM_GET_COLOR or
+;;; PKL_AST_BUILTIN_TERM_GET_BGCOLOR.
+
+ .macro builtin_get_color_bgcolor
+ .let #itype = pvm_make_integral_type (pvm_make_ulong (32, 64),
pvm_make_int (1, 32))
+ push #itype
+ push null
+ mktya
+ push ulong<64>3
+ mka ; ARR
+ tor ; _
+ .c if (comp_stmt_builtin == PKL_AST_BUILTIN_TERM_GET_COLOR)
+ .c {
+ pushoc ; R G B
+ .c }
+ .c else
+ .c {
+ pushobc ; R G B
+ .c }
+ swap
+ rot ; B G R
+ fromr ; B G R ARR
+ push ulong<64>0
+ rot
+ ains ; B G ARR
+ push ulong<64>1
+ rot
+ ains ; B ARR
+ push ulong<64>2
+ rot
+ ains ; ARR
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_SET_COLOR_BGCOLOR
+;;;
+;;; Body of the `term_set_color' and `term_set_bgcolor' compiler
+;;; built-in with prototypes
+;;; (int<32>[3] color) void
+;;;
+;;; This macro requires the C variable `comp_stmt_builtin' defined to
+;;; either PKL_AST_BUILTIN_TERM_SET_COLOR or
+;;; PKL_AST_BUILTIN_TERM_SET_BGCOLOR.
+
+ .macro builtin_set_color_bgcolor
+ pushvar 0, 0
+ push ulong<64>0
+ aref
+ tor
+ drop
+ push ulong<64>1
+ aref
+ tor
+ drop
+ push ulong<64>2
+ aref
+ tor
+ drop
+ drop
+ fromr
+ fromr
+ fromr
+ swap
+ rot
+ .c if (comp_stmt_builtin == PKL_AST_BUILTIN_TERM_SET_COLOR)
+ .c {
+ popoc
+ .c }
+ .c else
+ .c {
+ popobc
+ .c }
+ .end
+
+;;; RAS_MACRO_BUILTIN_TERM_BEGIN_CLASS
+;;;
+;;; Body of the `term_begin_class' compiler built-in with prototype
+;;; (string class) void
+
+ .macro builtin_term_begin_class
+ pushvar 0, 0
+ begsc
+ .end
+
+;;; RAS_MACRO_BUILTIN_TERM_END_CLASS
+;;;
+;;; Body of the `term_end_class' compiler built-in with prototype
+;;; (string class) void
+
+ .macro builtin_term_end_class
+ pushvar 0, 0
+ endsc
+ .end
+
+;;; RAS_MACRO_BUILTIN_TERM_BEGIN_HYPERLINK
+;;;
+;;; Body of the `term_begin_hyperlink' compiler built-in with prototype
+;;; (string url, string id = "") void
+
+ .macro builtin_term_begin_hyperlink
+ pushvar 0, 0
+ pushvar 0, 1
+ beghl
+ .end
+
+;;; RAS_MACRO_BUILTIN_TERM_END_HYPERLINK
+;;;
+;;; Body of the `term_end_hyperlink' compiler built-in with prototype
+;;; () void
+
+ .macro builtin_term_end_hyperlink
+ endhl
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_OBASE
+;;;
+;;; Body of the `vm_obase' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_vm_obase
+ pushob
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_SET_OBASE
+;;;
+;;; Body of the `vm_set_obase' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_vm_set_obase
+ pushvar 0, 0
+ popob
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_OPPRINT
+;;;
+;;; Body of the `vm_opprint' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_vm_opprint
+ pushopp
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_SET_OPPRINT
+;;;
+;;; Body of the `vm_set_opprint' compiler built-in with prototype
+;;; (int<32> pprint_p) void
+
+ .macro builtin_vm_set_opprint
+ pushvar 0, 0
+ popopp
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_OACUTOFF
+;;;
+;;; Body of the `vm_oacutoff' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_vm_oacutoff
+ pushoac
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_SET_OACUTOFF
+;;;
+;;; Body of the `vm_set_oacutoff' compiler built-in with prototype
+;;; (int<32> oacutoff) void
+
+ .macro builtin_vm_set_oacutoff
+ pushvar 0, 0
+ popoac
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_ODEPTH
+;;;
+;;; Body of the `vm_odepth' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_vm_odepth
+ pushod
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_SET_ODEPTH
+;;;
+;;; Body of the `vm_set_odepth' compiler built-in with prototype
+;;; (int<32> odepth) void
+
+ .macro builtin_vm_set_odepth
+ pushvar 0, 0
+ popod
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_OINDENT
+;;;
+;;; Body of the `vm_oindent' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_vm_oindent
+ pushoi
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_SET_OINDENT
+;;;
+;;; Body of the `vm_set_oindent' compiler built-in with prototype
+;;; (int<32> oindent) void
+
+ .macro builtin_vm_set_oindent
+ pushvar 0, 0
+ popoi
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_OMAPS
+;;;
+;;; Body of the `vm_omaps' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_vm_omaps
+ pushoo
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_SET_OMAPS
+;;;
+;;; Body of the `vm_set_omaps' compiler built-in with prototype
+;;; (int<32> omaps) void
+
+ .macro builtin_vm_set_omaps
+ pushvar 0, 0
+ popoo
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_OMODE
+;;;
+;;; Body of the `vm_omode' compiler built-in with prototype
+;;; () int<32>
+
+ .macro builtin_vm_omode
+ pushom
+ return
+ .end
+
+;;; RAS_MACRO_BUILTIN_VM_SET_OMODE
+;;;
+;;; Body of the `vm_set_omode' compiler built-in with prototype
+;;; (int<32> omode) void
+
+ .macro builtin_vm_set_omode
+ pushvar 0, 0
+ popom
+ .end
+
+;;; RAS_MACRO_BUILTIN_UNSAFE_STRING_SET
+;;;
+;;; Body of the `__pkl_unsafe_string_set' compiler built-in with prototype
+;;; (string dst, uint<64> index, string str) void
+
+ .macro builtin_unsafe_string_set
+ pushvar 0, 0
+ pushvar 0, 1
+ pushvar 0, 2
+ strset
+ drop
+ .end
diff --git a/libpoke/pkl-gen.c b/libpoke/pkl-gen.c
index 8b6278c1..bd5c1cf5 100644
--- a/libpoke/pkl-gen.c
+++ b/libpoke/pkl-gen.c
@@ -112,6 +112,7 @@
#define RAS_PUSH_ASM PKL_GEN_PUSH_ASM
#define RAS_POP_ASM PKL_GEN_POP_ASM
#include "pkl-gen.pkc"
+#include "pkl-gen-builtins.pkc"
/*
* SRC
@@ -618,243 +619,117 @@ PKL_PHASE_BEGIN_HANDLER (pkl_gen_ps_comp_stmt)
switch (comp_stmt_builtin)
{
case PKL_AST_BUILTIN_RAND:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RAND);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_RAND;
break;
case PKL_AST_BUILTIN_GET_ENDIAN:
- /* Fallthrough. */
+ RAS_MACRO_BUILTIN_GET_ENDIAN;
+ break;
case PKL_AST_BUILTIN_GET_IOS:
- if (comp_stmt_builtin == PKL_AST_BUILTIN_GET_ENDIAN)
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHEND);
- else
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHIOS);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_GET_IOS;
break;
case PKL_AST_BUILTIN_SET_ENDIAN:
- /* Fallthrough. */
+ RAS_MACRO_BUILTIN_SET_ENDIAN;
+ break;
case PKL_AST_BUILTIN_SET_IOS:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- if (comp_stmt_builtin == PKL_AST_BUILTIN_SET_ENDIAN)
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPEND);
- else
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPIOS);
- /* Always return `true' to facilitate using set_endian in
- struct constraint expressions. */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, pvm_make_int (1, 32));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_SET_IOS;
break;
case PKL_AST_BUILTIN_OPEN:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 1);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_OPEN);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_OPEN;
break;
case PKL_AST_BUILTIN_CLOSE:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_CLOSE);
+ RAS_MACRO_BUILTIN_CLOSE;
break;
case PKL_AST_BUILTIN_IOSIZE:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_IOSIZE);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NIP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_IOSIZE;
break;
case PKL_AST_BUILTIN_IOFLAGS:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_IOFLAGS);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NIP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_IOFLAGS;
break;
case PKL_AST_BUILTIN_IOGETB:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_IOGETB);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NIP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_IOBIAS;
break;
case PKL_AST_BUILTIN_IOSETB:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 1);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_IOSETB);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NIP);
+ RAS_MACRO_BUILTIN_IOSETBIAS;
break;
case PKL_AST_BUILTIN_FORGET:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 1);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_OGETM);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NIP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_FLUSH);
+ RAS_MACRO_BUILTIN_FLUSH;
break;
case PKL_AST_BUILTIN_GET_TIME:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_TIME);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_GET_TIME;
break;
case PKL_AST_BUILTIN_SLEEP:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 1);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_SLEEP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
+ RAS_MACRO_BUILTIN_SLEEP;
break;
case PKL_AST_BUILTIN_STRACE:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_STRACE, 0);
+ RAS_MACRO_BUILTIN_STRACE;
break;
case PKL_AST_BUILTIN_GETENV:
- {
- pvm_program_label label = pkl_asm_fresh_label (PKL_GEN_ASM);
-
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_GETENV);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_NIP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_BNN, label);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_exception (PVM_E_INVAL, PVM_E_INVAL_NAME,
- PVM_E_INVAL_ESTATUS, NULL,
NULL));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RAISE);
- pkl_asm_label (PKL_GEN_ASM, label);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
-
- break;
- }
+ RAS_MACRO_BUILTIN_GETENV;
+ break;
case PKL_AST_BUILTIN_TERM_GET_COLOR:
case PKL_AST_BUILTIN_TERM_GET_BGCOLOR:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_integral_type (pvm_make_ulong (32, 64),
- pvm_make_int (1, 32)));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH, PVM_NULL);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_MKTYA);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_ulong (3, 64));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_MKA); /* ARR */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_TOR); /* _ */
- if (comp_stmt_builtin == PKL_AST_BUILTIN_TERM_GET_COLOR)
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOC); /* R G B */
- else
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOBC); /* R G B */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_SWAP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ROT); /* B G R */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_FROMR); /* B G R ARR */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_ulong (0, 64));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ROT);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_AINS); /* B G ARR */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_ulong (1, 64));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ROT);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_AINS); /* B ARR */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_ulong (2, 64));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ROT);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_AINS); /* ARR */
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_GET_COLOR_BGCOLOR;
break;
case PKL_AST_BUILTIN_TERM_SET_COLOR:
case PKL_AST_BUILTIN_TERM_SET_BGCOLOR:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_ulong (0, 64));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_AREF);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_TOR);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_ulong (1, 64));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_AREF);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_TOR);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSH,
- pvm_make_ulong (2, 64));
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_AREF);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_TOR);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_FROMR);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_FROMR);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_FROMR);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_SWAP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ROT);
- if (comp_stmt_builtin == PKL_AST_BUILTIN_TERM_SET_COLOR)
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOC);
- else
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOBC);
+ RAS_MACRO_BUILTIN_SET_COLOR_BGCOLOR;
break;
case PKL_AST_BUILTIN_TERM_BEGIN_CLASS:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_BEGINSC);
+ RAS_MACRO_BUILTIN_TERM_BEGIN_CLASS;
break;
case PKL_AST_BUILTIN_TERM_END_CLASS:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ENDSC);
+ RAS_MACRO_BUILTIN_TERM_END_CLASS;
break;
case PKL_AST_BUILTIN_TERM_BEGIN_HYPERLINK:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 1);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_BEGINHL);
+ RAS_MACRO_BUILTIN_TERM_BEGIN_HYPERLINK;
break;
case PKL_AST_BUILTIN_TERM_END_HYPERLINK:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_ENDHL);
+ RAS_MACRO_BUILTIN_TERM_END_HYPERLINK;
break;
case PKL_AST_BUILTIN_VM_OBASE:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOB);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_VM_OBASE;
break;
case PKL_AST_BUILTIN_VM_SET_OBASE:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOB);
+ RAS_MACRO_BUILTIN_VM_SET_OBASE;
break;
case PKL_AST_BUILTIN_VM_OPPRINT:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOPP);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_VM_OPPRINT;
break;
case PKL_AST_BUILTIN_VM_SET_OPPRINT:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOPP);
+ RAS_MACRO_BUILTIN_VM_SET_OPPRINT;
break;
case PKL_AST_BUILTIN_VM_OACUTOFF:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOAC);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_VM_OACUTOFF;
break;
case PKL_AST_BUILTIN_VM_SET_OACUTOFF:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOAC);
+ RAS_MACRO_BUILTIN_VM_SET_OACUTOFF;
break;
case PKL_AST_BUILTIN_VM_ODEPTH:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOD);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_VM_ODEPTH;
break;
case PKL_AST_BUILTIN_VM_SET_ODEPTH:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOD);
+ RAS_MACRO_BUILTIN_VM_SET_ODEPTH;
break;
case PKL_AST_BUILTIN_VM_OINDENT:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOI);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_VM_OINDENT;
break;
case PKL_AST_BUILTIN_VM_SET_OINDENT:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOI);
+ RAS_MACRO_BUILTIN_VM_SET_OINDENT;
break;
case PKL_AST_BUILTIN_VM_OMAPS:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOO);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_VM_OMAPS;
break;
case PKL_AST_BUILTIN_VM_SET_OMAPS:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOO);
+ RAS_MACRO_BUILTIN_VM_SET_OMAPS;
break;
case PKL_AST_BUILTIN_VM_OMODE:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHOM);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_RETURN);
+ RAS_MACRO_BUILTIN_VM_OMODE;
break;
case PKL_AST_BUILTIN_VM_SET_OMODE:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_POPOM);
+ RAS_MACRO_BUILTIN_VM_SET_OMODE;
break;
case PKL_AST_BUILTIN_UNSAFE_STRING_SET:
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 0);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 1);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_PUSHVAR, 0, 2);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_STRSET);
- pkl_asm_insn (PKL_GEN_ASM, PKL_INSN_DROP);
+ RAS_MACRO_BUILTIN_UNSAFE_STRING_SET;
break;
default:
assert (0);
--
2.11.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [COMMITTED] pkl: gen: move compiler built-ins to a RAS file,
Jose E. Marchesi <=