* bugfix of STRCONCAT alignment problem

This commit is contained in:
carl 1998-03-27 23:48:06 +00:00
parent 1988f09fb0
commit b170680325

View File

@ -433,40 +433,25 @@
begin
asm
move.l 12(a6), a0 { @s1 = a0 }
move.b (a0),d1 { Get length of string }
and.l #$ff,d1 { extend to dword }
lea 1(a0,d1),a0 { Get the address of the end of the second string }
neg.l d1
add.l #$ff,d1
move.l 8(a6),a1
move.b (a1)+,d0 { Length of second string in d0 }
cmp.b d1,d0
ble @LM5
move.b d1,d0 { If too long, then truncate to 255 }
@LM5:
move.b d0,d1
move.l a2,d6 { save a2 }
move.l 12(a6),a2
add.b d1,(a2)
move.l d6,a2 { restore a2 }
andi.l #$ff,d1
move.l d1,d0 { Save length of string }
lsr.l #2,d1
bra @LMOVE6
@LMOVE55:
move.l (a1)+,(a0)+
@LMOVE6:
dbra d1,@LMOVE55 { d1 is counter }
move.l d0,d1 { now if bytes left to move, move them }
andi.l #3,d1 { i.e d1 := d1 mod 4 }
bra @LMOVE56
@LMOVE57:
move.b (a1)+,(a0)+ { move those remaining bytes }
@LMOVE56:
dbra d1,@LMOVE57
move.b #255,d0
move.l s1,a0
move.l s1,a1
sub.b (a0),d0 { copyl:= 255 -length(s1) }
move.b (a1),d6
cmp.b d0,d6 { if copyl > length(s2) then }
ble @Lcontinue
move.b (a1),d0 { copyl:=length(s2) }
@Lcontinue:
move.b (a0),d6
and.l #$ff,d6
lea 1(a0,d6),a0 { s1[length(s1)+1] }
add.l #1,a1 { s2[1] }
move.b d0,d6
@Loop:
move.b (a1)+,(a0)+ { s1[i] := s2[i]; }
dbra d6,@Loop
move.l s1,a0
add.b d0,(a0) { change to new string length }
end ['d0','d1','a0','a1','d6'];
end;
@ -738,15 +723,8 @@ XDEF RE_BOUNDS_CHECK
{
$Log$
Revision 1.1 1998-03-25 11:18:44 root
Initial revision
Revision 1.19 1998/03/21 04:18:36 carl
* bugfix of FillChar (wrong value)
* bugfix of FillObject (wrong value)
* bugfix of strcopy (illegal address)
* strconcat tested ok
(still left to fix: STRCMP flag is LOST because of push and pop!)
Revision 1.2 1998-03-27 23:48:06 carl
* bugfix of STRCONCAT alignment problem
Revision 1.18 1998/03/02 04:17:24 carl
* problem with CHECK_OBJECT fixed, will probably only work with