mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-16 08:40:19 +02:00
string->number, etc intrinsics
* libguile/intrinsics.c (string_to_number): New helper. (scm_bootstrap_intrinsics): Init new intrinsics. * libguile/intrinsics.h (string->number, string->symbol) (symbol->keyword): Add new intrinsics. * libguile/vm-engine.c (call-scm<-scm): New intrinsic dispatcher. (string->number, string->symbol, symbol->keyword): Disable these instructions. * module/system/vm/assembler.scm (encode-X8_S12_S12-C32<-/shuffle): (define-scm<-scm-intrinsic): Enable scm<-scm intrinsics. (string->number, string->symbol, symbol->keyword): New intrinsic assemblers.
This commit is contained in:
parent
b0641783c9
commit
1c49c1407b
4 changed files with 51 additions and 22 deletions
|
@ -1546,7 +1546,23 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
|
|||
NEXT (2);
|
||||
}
|
||||
|
||||
VM_DEFINE_OP (54, unused_54, NULL, NOP)
|
||||
VM_DEFINE_OP (54, call_scm_from_scm, "call-scm<-scm", OP2 (X8_S12_S12, C32) | OP_DST)
|
||||
{
|
||||
scm_t_uint8 dst, src;
|
||||
SCM res;
|
||||
scm_t_scm_from_scm_intrinsic intrinsic;
|
||||
|
||||
UNPACK_12_12 (op, dst, src);
|
||||
intrinsic = intrinsics[ip[1]];
|
||||
|
||||
SYNC_IP ();
|
||||
res = intrinsic (SP_REF (src));
|
||||
CACHE_SP ();
|
||||
SP_SET (dst, res);
|
||||
|
||||
NEXT (2);
|
||||
}
|
||||
|
||||
VM_DEFINE_OP (55, unused_55, NULL, NOP)
|
||||
VM_DEFINE_OP (56, unused_56, NULL, NOP)
|
||||
{
|
||||
|
@ -2122,14 +2138,7 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
|
|||
abort (); /* never reached */
|
||||
}
|
||||
|
||||
/* string-set! instruction is currently number 192. Probably need to
|
||||
reorder before releasing. */
|
||||
|
||||
/* string->number dst:12 src:12
|
||||
*
|
||||
* Parse a string in SRC to a number, and store in DST.
|
||||
*/
|
||||
VM_DEFINE_OP (78, string_to_number, "string->number", OP1 (X8_S12_S12) | OP_DST)
|
||||
VM_DEFINE_OP (78, unused_78, NULL, NOP)
|
||||
{
|
||||
scm_t_uint16 dst, src;
|
||||
|
||||
|
@ -2141,11 +2150,7 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
|
|||
NEXT (1);
|
||||
}
|
||||
|
||||
/* string->symbol dst:12 src:12
|
||||
*
|
||||
* Parse a string in SRC to a symbol, and store in DST.
|
||||
*/
|
||||
VM_DEFINE_OP (79, string_to_symbol, "string->symbol", OP1 (X8_S12_S12) | OP_DST)
|
||||
VM_DEFINE_OP (79, unused_79, NULL, NOP)
|
||||
{
|
||||
scm_t_uint16 dst, src;
|
||||
|
||||
|
@ -2155,11 +2160,7 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
|
|||
NEXT (1);
|
||||
}
|
||||
|
||||
/* symbol->keyword dst:12 src:12
|
||||
*
|
||||
* Make a keyword from the symbol in SRC, and store it in DST.
|
||||
*/
|
||||
VM_DEFINE_OP (80, symbol_to_keyword, "symbol->keyword", OP1 (X8_S12_S12) | OP_DST)
|
||||
VM_DEFINE_OP (80, unused_80, NULL, NOP)
|
||||
{
|
||||
scm_t_uint16 dst, src;
|
||||
UNPACK_12_12 (op, dst, src);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue