From 279eb461b1c67e9869ce6911560dbd2e6553fe46 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 23 Apr 2010 06:48:58 -0400 Subject: [PATCH] compiler.cfg: remove ##set-string-nth-fast instruction since it can be expressed just as efficiently using other instructions --- basis/compiler/cfg/instructions/instructions.factor | 4 ---- basis/compiler/cfg/intrinsics/intrinsics.factor | 1 + basis/compiler/cfg/intrinsics/slots/slots.factor | 6 ------ basis/compiler/cfg/intrinsics/strings/authors.txt | 1 + .../compiler/cfg/intrinsics/strings/strings.factor | 13 +++++++++++++ basis/compiler/codegen/codegen.factor | 1 - basis/cpu/architecture/architecture.factor | 1 - basis/cpu/ppc/ppc.factor | 4 ---- basis/cpu/x86/x86.factor | 7 ------- 9 files changed, 15 insertions(+), 23 deletions(-) create mode 100644 basis/compiler/cfg/intrinsics/strings/authors.txt create mode 100644 basis/compiler/cfg/intrinsics/strings/strings.factor diff --git a/basis/compiler/cfg/instructions/instructions.factor b/basis/compiler/cfg/instructions/instructions.factor index 2108d2e2a8..63b4ee22e3 100644 --- a/basis/compiler/cfg/instructions/instructions.factor +++ b/basis/compiler/cfg/instructions/instructions.factor @@ -93,10 +93,6 @@ def: dst/int-rep use: obj/tagged-rep index/int-rep temp: temp/int-rep ; -INSN: ##set-string-nth-fast -use: src/int-rep obj/tagged-rep index/int-rep -temp: temp/int-rep ; - ! Register transfers PURE-INSN: ##copy def: dst diff --git a/basis/compiler/cfg/intrinsics/intrinsics.factor b/basis/compiler/cfg/intrinsics/intrinsics.factor index 535bcf4f7f..9f5167e116 100644 --- a/basis/compiler/cfg/intrinsics/intrinsics.factor +++ b/basis/compiler/cfg/intrinsics/intrinsics.factor @@ -9,6 +9,7 @@ compiler.cfg.intrinsics.allot compiler.cfg.intrinsics.fixnum compiler.cfg.intrinsics.float compiler.cfg.intrinsics.slots +compiler.cfg.intrinsics.strings compiler.cfg.intrinsics.misc compiler.cfg.comparisons ; QUALIFIED: alien diff --git a/basis/compiler/cfg/intrinsics/slots/slots.factor b/basis/compiler/cfg/intrinsics/slots/slots.factor index 5203c8535c..1ec648b908 100644 --- a/basis/compiler/cfg/intrinsics/slots/slots.factor +++ b/basis/compiler/cfg/intrinsics/slots/slots.factor @@ -74,9 +74,3 @@ IN: compiler.cfg.intrinsics.slots dup third immediate-slot-offset? [ (emit-set-slot-imm) ] [ (emit-set-slot) ] if ] [ drop emit-primitive ] if ; - -: emit-string-nth ( -- ) - 2inputs swap ^^string-nth ds-push ; - -: emit-set-string-nth-fast ( -- ) - 3inputs swap next-vreg ##set-string-nth-fast ; diff --git a/basis/compiler/cfg/intrinsics/strings/authors.txt b/basis/compiler/cfg/intrinsics/strings/authors.txt new file mode 100644 index 0000000000..1901f27a24 --- /dev/null +++ b/basis/compiler/cfg/intrinsics/strings/authors.txt @@ -0,0 +1 @@ +Slava Pestov diff --git a/basis/compiler/cfg/intrinsics/strings/strings.factor b/basis/compiler/cfg/intrinsics/strings/strings.factor new file mode 100644 index 0000000000..40c54bdfdc --- /dev/null +++ b/basis/compiler/cfg/intrinsics/strings/strings.factor @@ -0,0 +1,13 @@ +! Copyright (C) 2010 Slava Pestov. +! See http://factorcode.org/license.txt for BSD license. +USING: kernel compiler.constants compiler.cfg.hats +compiler.cfg.instructions compiler.cfg.registers +compiler.cfg.stacks ; +IN: compiler.cfg.intrinsics.strings + +: emit-string-nth ( -- ) + 2inputs swap ^^string-nth ds-push ; + +: emit-set-string-nth-fast ( -- ) + 3inputs ^^tagged>integer ^^add swap [ string-offset ] dip + ##set-alien-integer-1 ; diff --git a/basis/compiler/codegen/codegen.factor b/basis/compiler/codegen/codegen.factor index 1e824dc706..a88c9a726f 100755 --- a/basis/compiler/codegen/codegen.factor +++ b/basis/compiler/codegen/codegen.factor @@ -94,7 +94,6 @@ CODEGEN: ##slot-imm %slot-imm CODEGEN: ##set-slot %set-slot CODEGEN: ##set-slot-imm %set-slot-imm CODEGEN: ##string-nth %string-nth -CODEGEN: ##set-string-nth-fast %set-string-nth-fast CODEGEN: ##add %add CODEGEN: ##add-imm %add-imm CODEGEN: ##sub %sub diff --git a/basis/cpu/architecture/architecture.factor b/basis/cpu/architecture/architecture.factor index a2e5050edf..ab335ba188 100644 --- a/basis/cpu/architecture/architecture.factor +++ b/basis/cpu/architecture/architecture.factor @@ -226,7 +226,6 @@ HOOK: %set-slot cpu ( src obj slot -- ) HOOK: %set-slot-imm cpu ( src obj slot tag -- ) HOOK: %string-nth cpu ( dst obj index temp -- ) -HOOK: %set-string-nth-fast cpu ( ch obj index temp -- ) HOOK: %add cpu ( dst src1 src2 -- ) HOOK: %add-imm cpu ( dst src1 src2 -- ) diff --git a/basis/cpu/ppc/ppc.factor b/basis/cpu/ppc/ppc.factor index 6f9354a767..3c23ae1b5f 100644 --- a/basis/cpu/ppc/ppc.factor +++ b/basis/cpu/ppc/ppc.factor @@ -160,10 +160,6 @@ M:: ppc %string-nth ( dst src index temp -- ) "end" resolve-label ] with-scope ; -M:: ppc %set-string-nth-fast ( ch obj index temp -- ) - temp obj index ADD - ch temp string-offset STB ; - M: ppc %add ADD ; M: ppc %add-imm ADDI ; M: ppc %sub swap SUBF ; diff --git a/basis/cpu/x86/x86.factor b/basis/cpu/x86/x86.factor index fe2f0da02d..8e57f36be9 100644 --- a/basis/cpu/x86/x86.factor +++ b/basis/cpu/x86/x86.factor @@ -354,13 +354,6 @@ M:: x86 %string-nth ( dst src index temp -- ) dst new-dst int-rep %copy ] with-small-register ; -M:: x86 %set-string-nth-fast ( ch str index temp -- ) - ch { index str temp } 8 [| new-ch | - new-ch ch int-rep %copy - temp str index [+] LEA - temp string-offset [+] new-ch 8-bit-version-of MOV - ] with-small-register ; - :: %alien-integer-getter ( dst src offset size quot -- ) dst { src } size [| new-dst | new-dst dup size n-bit-version-of dup src offset [+] MOV