mirror of
https://github.com/cc65/cc65.git
synced 2025-02-07 20:30:49 +00:00
Merge pull request #429 from pfusik/opt-stdfunc
Optimize the inlined strlen/memcpy/memset
This commit is contained in:
commit
390ee4e22f
@ -284,7 +284,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
|||||||
Label = GetLocalLabel ();
|
Label = GetLocalLabel ();
|
||||||
|
|
||||||
/* Generate memcpy code */
|
/* Generate memcpy code */
|
||||||
if (Arg3.Expr.IVal <= 127) {
|
if (Arg3.Expr.IVal <= 129) {
|
||||||
|
|
||||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
|
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
|
||||||
g_defcodelabel (Label);
|
g_defcodelabel (Label);
|
||||||
@ -355,7 +355,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
|||||||
Label = GetLocalLabel ();
|
Label = GetLocalLabel ();
|
||||||
|
|
||||||
/* Generate memcpy code */
|
/* Generate memcpy code */
|
||||||
if (Arg3.Expr.IVal <= 127 && !AllowOneIndex) {
|
if (Arg3.Expr.IVal <= 129 && !AllowOneIndex) {
|
||||||
|
|
||||||
if (Offs == 0) {
|
if (Offs == 0) {
|
||||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal - 1));
|
AddCodeLine ("ldy #$%02X", (unsigned char) (Offs + Arg3.Expr.IVal - 1));
|
||||||
@ -433,7 +433,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
|||||||
Label = GetLocalLabel ();
|
Label = GetLocalLabel ();
|
||||||
|
|
||||||
/* Generate memcpy code */
|
/* Generate memcpy code */
|
||||||
if (Arg3.Expr.IVal <= 127 && !AllowOneIndex) {
|
if (Arg3.Expr.IVal <= 129 && !AllowOneIndex) {
|
||||||
|
|
||||||
if (Offs == 0) {
|
if (Offs == 0) {
|
||||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal - 1));
|
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal - 1));
|
||||||
@ -499,7 +499,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
|||||||
/* Generate memcpy code */
|
/* Generate memcpy code */
|
||||||
AddCodeLine ("sta ptr1");
|
AddCodeLine ("sta ptr1");
|
||||||
AddCodeLine ("stx ptr1+1");
|
AddCodeLine ("stx ptr1+1");
|
||||||
if (Arg3.Expr.IVal <= 127) {
|
if (Arg3.Expr.IVal <= 129) {
|
||||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal - 1));
|
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal - 1));
|
||||||
g_defcodelabel (Label);
|
g_defcodelabel (Label);
|
||||||
AddCodeLine ("lda (sp),y");
|
AddCodeLine ("lda (sp),y");
|
||||||
@ -635,7 +635,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
|||||||
Label = GetLocalLabel ();
|
Label = GetLocalLabel ();
|
||||||
|
|
||||||
/* Generate memset code */
|
/* Generate memset code */
|
||||||
if (Arg3.Expr.IVal <= 127) {
|
if (Arg3.Expr.IVal <= 129) {
|
||||||
|
|
||||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
|
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
|
||||||
AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
|
AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
|
||||||
@ -720,7 +720,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
|||||||
/* Generate code */
|
/* Generate code */
|
||||||
AddCodeLine ("sta ptr1");
|
AddCodeLine ("sta ptr1");
|
||||||
AddCodeLine ("stx ptr1+1");
|
AddCodeLine ("stx ptr1+1");
|
||||||
if (Arg3.Expr.IVal <= 127) {
|
if (Arg3.Expr.IVal <= 129) {
|
||||||
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
|
AddCodeLine ("ldy #$%02X", (unsigned char) (Arg3.Expr.IVal-1));
|
||||||
AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
|
AddCodeLine ("lda #$%02X", (unsigned char) Arg2.Expr.IVal);
|
||||||
g_defcodelabel (Label);
|
g_defcodelabel (Label);
|
||||||
@ -1245,9 +1245,8 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr)
|
|||||||
AddCodeLine ("ldy #$FF");
|
AddCodeLine ("ldy #$FF");
|
||||||
g_defcodelabel (L);
|
g_defcodelabel (L);
|
||||||
AddCodeLine ("iny");
|
AddCodeLine ("iny");
|
||||||
AddCodeLine ("lda %s,y", ED_GetLabelName (&Arg, 0));
|
AddCodeLine ("ldx %s,y", ED_GetLabelName (&Arg, 0));
|
||||||
AddCodeLine ("bne %s", LocalLabelName (L));
|
AddCodeLine ("bne %s", LocalLabelName (L));
|
||||||
AddCodeLine ("tax");
|
|
||||||
AddCodeLine ("tya");
|
AddCodeLine ("tya");
|
||||||
|
|
||||||
/* The function result is an rvalue in the primary register */
|
/* The function result is an rvalue in the primary register */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user