[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/3] pkl: Use RAS macro zero_extend_64
From: |
Mohammad-Reza Nabipoor |
Subject: |
[PATCH 2/3] pkl: Use RAS macro zero_extend_64 |
Date: |
Sat, 8 Jan 2022 21:44:51 +0330 |
2022-01-08 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* libpoke/pkl-gen.pks (struct_field_inserter): Use `zero_extend_64`.
(struct_deintegrator): Likewise.
---
ChangeLog | 5 +++++
libpoke/pkl-gen.pks | 30 +++++++-----------------------
2 files changed, 12 insertions(+), 23 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 8150754b..95ff7fc9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2022-01-08 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
+
+ * libpoke/pkl-gen.pks (struct_field_inserter): Use `zero_extend_64`.
+ (struct_deintegrator): Likewise.
+
2022-01-08 Mohammad-Reza Nabipoor <mnabipoor@gnu.org>
* libpoke/pkl-gen.pks (zero_extend_64): Add new macro.
diff --git a/libpoke/pkl-gen.pks b/libpoke/pkl-gen.pks
index 080d2305..2b874788 100644
--- a/libpoke/pkl-gen.pks
+++ b/libpoke/pkl-gen.pks
@@ -1546,7 +1546,6 @@
;;; field being extracted.
.macro struct_field_inserter @struct_itype @field_type #ivalw #fieldw
- .let @uint64_type = pkl_ast_make_integral_type (PKL_PASS_AST, 64, 0)
;; Do not insert absent fields.
srefia ; IVAL SCT I ABSENT_P
bnzi .omitted_field
@@ -1558,8 +1557,7 @@
;; Where REOFF is the _relative_ bit-offset of the field in
;; the struct, i.e. EOFF - SOFF
rot ; SCT I IVAL
- nton @struct_itype, @uint64_type
- nip
+ .e zero_extend_64 @struct_itype
tor ; SCT I [IVAL]
srefi ; SCT I EVAL [IVAL]
tor ; SCT I [IVAL EVAL]
@@ -1586,7 +1584,7 @@
.let @base_type = PKL_AST_TYPE_O_BASE_TYPE (@field_type)
ogetm
nip ; SCT I (IVALW-REOFF-FIELDW) EVAL [IVAL]
- nton @base_type, @uint64_type
+ .e zero_extend_64 @base_type
.c }
.c else if (PKL_AST_TYPE_CODE (@field_type) == PKL_TYPE_STRUCT)
.c {
@@ -1596,28 +1594,14 @@
.c PKL_GEN_PUSH_SET_CONTEXT (PKL_GEN_CTX_IN_INTEGRATOR);
.c PKL_PASS_SUBPASS (@field_type);
.c PKL_GEN_POP_CONTEXT;
- nton @field_itype, @uint64_type
+ .e zero_extend_64 @field_itype
.c }
.c else
.c {
- nton @field_type, @uint64_type
+ .e zero_extend_64 @field_type
.c }
- ;; Zero left unused bits of IVAL
- push ulong<64>64
- push #fieldw
- sublu
- nip2
- lutoiu 32
- nip
- dup
- quake
- bsllu
- nip2
- swap
- bsrlu
- nip2
+ ; SCT I (IVALW-EOFF-FIELDW) EVAL [IVAL]
;; Finish the computation.
- nip ; SCT I (IVALW-EOFF-FIELDW) EVAL [IVAL]
swap ; SCT I EVAL (IVALW-EOFF-FIELDW) [IVAL]
lutoiu 32
nip ; SCT I EVAL (IVALW-EOFF-FIELDW) [IVAL]
@@ -1627,6 +1611,7 @@
borlu
nip2 ; SCT I ((EVAL<<(IVALW-EOFF-FIELDW))|IVAL)
nip2 ; ((EVAL<<(IVALW-EOFF-FIELDW))|IVAL)
+ .let @uint64_type = pkl_ast_make_integral_type (PKL_PASS_AST, 64, 0)
nton @uint64_type, @struct_itype
nip
ba .next
@@ -1966,8 +1951,7 @@
;; calculations below.
.let @itype = PKL_AST_TYPE_S_ITYPE (@type_struct)
.let @uint64_type = pkl_ast_make_integral_type (PKL_PASS_AST, 64, 0)
- nton @itype, @uint64_type
- nip
+ .e zero_extend_64 @itype
regvar $ival
;; This is the offset argument to the mksct instruction below.
push ulong<64>0 ; OFF
--
2.34.1