diff options
author | Mike Pall <mike> | 2011-04-05 16:31:48 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-04-05 16:31:48 +0200 |
commit | 3acd4892e96fb73a751852a079537adc3fd2d560 (patch) | |
tree | 4d0c3be6ac80ae32f5d56c16e34103d22b609562 /src | |
parent | 48438b9e13e8a9ce19dea37a75d29c015968c619 (diff) | |
download | luajit-3acd4892e96fb73a751852a079537adc3fd2d560.tar.gz luajit-3acd4892e96fb73a751852a079537adc3fd2d560.tar.bz2 luajit-3acd4892e96fb73a751852a079537adc3fd2d560.zip |
Add FOLD rule for FLOAT->NUM->FLOAT conversions.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_fold.c | 8 | ||||
-rw-r--r-- | src/lj_opt_fold.c | 9 |
2 files changed, 14 insertions, 3 deletions
diff --git a/src/buildvm_fold.c b/src/buildvm_fold.c index 33a117d7..b43d2c48 100644 --- a/src/buildvm_fold.c +++ b/src/buildvm_fold.c | |||
@@ -111,13 +111,15 @@ static uint32_t nexttoken(char **pp, int allowlit, int allowany) | |||
111 | if (!strcmp(ircall_names[i], p+7)) | 111 | if (!strcmp(ircall_names[i], p+7)) |
112 | return i; | 112 | return i; |
113 | } else if (allowlit && !strncmp(p, "IRCONV_", 7)) { | 113 | } else if (allowlit && !strncmp(p, "IRCONV_", 7)) { |
114 | for (i = 0; irt_names[i]; i++) | 114 | for (i = 0; irt_names[i]; i++) { |
115 | if (!strncmp(irt_names[i], p+7, 3) && p[10] == '_') { | 115 | const char *r = strchr(p+7, '_'); |
116 | if (r && !strncmp(irt_names[i], p+7, r-(p+7))) { | ||
116 | uint32_t j; | 117 | uint32_t j; |
117 | for (j = 0; irt_names[j]; j++) | 118 | for (j = 0; irt_names[j]; j++) |
118 | if (!strncmp(irt_names[j], p+11, 3)) | 119 | if (!strcmp(irt_names[j], r+1)) |
119 | return (i << 5) + j; | 120 | return (i << 5) + j; |
120 | } | 121 | } |
122 | } | ||
121 | } else if (allowlit && *p >= '0' && *p <= '9') { | 123 | } else if (allowlit && *p >= '0' && *p <= '9') { |
122 | for (i = 0; *p >= '0' && *p <= '9'; p++) | 124 | for (i = 0; *p >= '0' && *p <= '9'; p++) |
123 | i = i*10 + (*p - '0'); | 125 | i = i*10 + (*p - '0'); |
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index edd376c9..44a55709 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -914,6 +914,15 @@ LJFOLDF(simplify_conv_int_i64) | |||
914 | return NEXTFOLD; | 914 | return NEXTFOLD; |
915 | } | 915 | } |
916 | 916 | ||
917 | LJFOLD(CONV CONV IRCONV_NUM_FLOAT) /* _NUM */ | ||
918 | LJFOLDF(simplify_conv_flt_num) | ||
919 | { | ||
920 | PHIBARRIER(fleft); | ||
921 | if ((fleft->op2 & IRCONV_SRCMASK) == IRT_NUM) | ||
922 | return fleft->op1; | ||
923 | return NEXTFOLD; | ||
924 | } | ||
925 | |||
917 | /* Shortcut TOBIT + IRT_NUM <- IRT_INT/IRT_U32 conversion. */ | 926 | /* Shortcut TOBIT + IRT_NUM <- IRT_INT/IRT_U32 conversion. */ |
918 | LJFOLD(TOBIT CONV KNUM) | 927 | LJFOLD(TOBIT CONV KNUM) |
919 | LJFOLDF(simplify_tobit_conv) | 928 | LJFOLDF(simplify_tobit_conv) |