diff options
author | Mike Pall <mike> | 2020-06-23 03:06:45 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2020-06-23 03:06:45 +0200 |
commit | ff34b48ddd6f2b3bdd26d6088662a214ba6b0288 (patch) | |
tree | 5585ab1933d148b046061a1e061686aa09e63789 /src/vm_ppc.dasc | |
parent | a44f53acf53603e7d9b88352de035b1804be4e88 (diff) | |
download | luajit-ff34b48ddd6f2b3bdd26d6088662a214ba6b0288.tar.gz luajit-ff34b48ddd6f2b3bdd26d6088662a214ba6b0288.tar.bz2 luajit-ff34b48ddd6f2b3bdd26d6088662a214ba6b0288.zip |
Redesign and harden string interning.
Up to 40% faster on hash-intensive benchmarks.
With some ideas from Sokolov Yura.
Diffstat (limited to 'src/vm_ppc.dasc')
-rw-r--r-- | src/vm_ppc.dasc | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/vm_ppc.dasc b/src/vm_ppc.dasc index 7a2d321e..18fc6f93 100644 --- a/src/vm_ppc.dasc +++ b/src/vm_ppc.dasc | |||
@@ -1447,9 +1447,9 @@ static void build_subroutines(BuildCtx *ctx) | |||
1447 | | beq ->fff_restv | 1447 | | beq ->fff_restv |
1448 | | lwz TMP0, TAB:CARG1->hmask | 1448 | | lwz TMP0, TAB:CARG1->hmask |
1449 | | li CARG3, LJ_TTAB // Use metatable as default result. | 1449 | | li CARG3, LJ_TTAB // Use metatable as default result. |
1450 | | lwz TMP1, STR:RC->hash | 1450 | | lwz TMP1, STR:RC->sid |
1451 | | lwz NODE:TMP2, TAB:CARG1->node | 1451 | | lwz NODE:TMP2, TAB:CARG1->node |
1452 | | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask | 1452 | | and TMP1, TMP1, TMP0 // idx = str->sid & tab->hmask |
1453 | | slwi TMP0, TMP1, 5 | 1453 | | slwi TMP0, TMP1, 5 |
1454 | | slwi TMP1, TMP1, 3 | 1454 | | slwi TMP1, TMP1, 3 |
1455 | | sub TMP1, TMP0, TMP1 | 1455 | | sub TMP1, TMP0, TMP1 |
@@ -4588,9 +4588,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
4588 | |->BC_TGETS_Z: | 4588 | |->BC_TGETS_Z: |
4589 | | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = dst*8 | 4589 | | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = dst*8 |
4590 | | lwz TMP0, TAB:RB->hmask | 4590 | | lwz TMP0, TAB:RB->hmask |
4591 | | lwz TMP1, STR:RC->hash | 4591 | | lwz TMP1, STR:RC->sid |
4592 | | lwz NODE:TMP2, TAB:RB->node | 4592 | | lwz NODE:TMP2, TAB:RB->node |
4593 | | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask | 4593 | | and TMP1, TMP1, TMP0 // idx = str->sid & tab->hmask |
4594 | | slwi TMP0, TMP1, 5 | 4594 | | slwi TMP0, TMP1, 5 |
4595 | | slwi TMP1, TMP1, 3 | 4595 | | slwi TMP1, TMP1, 3 |
4596 | | sub TMP1, TMP0, TMP1 | 4596 | | sub TMP1, TMP0, TMP1 |
@@ -4784,10 +4784,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
4784 | |->BC_TSETS_Z: | 4784 | |->BC_TSETS_Z: |
4785 | | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = src*8 | 4785 | | // TAB:RB = GCtab *, STR:RC = GCstr *, RA = src*8 |
4786 | | lwz TMP0, TAB:RB->hmask | 4786 | | lwz TMP0, TAB:RB->hmask |
4787 | | lwz TMP1, STR:RC->hash | 4787 | | lwz TMP1, STR:RC->sid |
4788 | | lwz NODE:TMP2, TAB:RB->node | 4788 | | lwz NODE:TMP2, TAB:RB->node |
4789 | | stb ZERO, TAB:RB->nomm // Clear metamethod cache. | 4789 | | stb ZERO, TAB:RB->nomm // Clear metamethod cache. |
4790 | | and TMP1, TMP1, TMP0 // idx = str->hash & tab->hmask | 4790 | | and TMP1, TMP1, TMP0 // idx = str->sid & tab->hmask |
4791 | |.if FPU | 4791 | |.if FPU |
4792 | | lfdx f14, BASE, RA | 4792 | | lfdx f14, BASE, RA |
4793 | |.else | 4793 | |.else |