diff --git a/base/neo/mathapi.asm b/base/neo/mathapi.asm index ffb4bd5db..6a2c4de85 100644 --- a/base/neo/mathapi.asm +++ b/base/neo/mathapi.asm @@ -12,17 +12,26 @@ STACK_SIZE1 = 1 VAR_FLOAT = $40 VAR_INTEGER = 0 +VAR0_TYPE = VAR_ADDRESS VAR1_TYPE = STACK_ADDRESS VAR2_TYPE = STACK_ADDRESS+1 +VAR0_B0 = VAR_ADDRESS+1 +VAR0_B1 = VAR_ADDRESS+2 +VAR0_B2 = VAR_ADDRESS+3 +VAR0_B3 = VAR_ADDRESS+4 + VAR1_B0 = STACK_ADDRESS+2 VAR1_B1 = STACK_ADDRESS+4 VAR1_B2 = STACK_ADDRESS+6 VAR1_B3 = STACK_ADDRESS+8 + VAR2_B0 = STACK_ADDRESS+3 VAR2_B1 = STACK_ADDRESS+5 VAR2_B2 = STACK_ADDRESS+7 VAR2_B3 = STACK_ADDRESS+9 + +VAR0 = VAR0_B0 VAR1 = VAR1_B0 VAR2 = VAR2_B0 diff --git a/lib/system.pas b/lib/system.pas index 6de6e2bac..97c98cbbd 100644 --- a/lib/system.pas +++ b/lib/system.pas @@ -2204,22 +2204,22 @@ function Sin(x: single): single; overload; begin {$ifdef neo} asm - mva x VAR_ADDRESS+1 - mva x+1 VAR_ADDRESS+2 - mva x+2 VAR_ADDRESS+3 - mva x+3 VAR_ADDRESS+4 + mva x VAR0_B0 + mva x+1 VAR0_B1 + mva x+2 VAR0_B2 + mva x+3 VAR0_B3 - mva #VAR_FLOAT VAR_ADDRESS + mva #VAR_FLOAT VAR0_TYPE mva #VAR_ADDRESS NEOMESSAGE_PAR1W mva #STACK_SIZE1 NEOMESSAGE_PAR2W jsr @WaitMessage mva #MATH_SIN NEOMESSAGE_FUNC mva #MATH_GROUP NEOMESSAGE_GROUP - mva VAR_ADDRESS+1 result - mva VAR_ADDRESS+2 result+1 - mva VAR_ADDRESS+3 result+2 - mva VAR_ADDRESS+4 result+3 + mva VAR0_B0 result + mva VAR0_B1 result+1 + mva VAR0_B2 result+2 + mva VAR0_B3 result+3 end; {$else} Result := fsincos(x, false); @@ -2239,22 +2239,22 @@ function Cos(x: single): single; overload; begin {$ifdef neo} asm - mva x VAR_ADDRESS+1 - mva x+1 VAR_ADDRESS+2 - mva x+2 VAR_ADDRESS+3 - mva x+3 VAR_ADDRESS+4 + mva x VAR0_B0 + mva x+1 VAR0_B1 + mva x+2 VAR0_B2 + mva x+3 VAR0_B3 - mva #VAR_FLOAT VAR_ADDRESS + mva #VAR_FLOAT VAR0_TYPE mva #VAR_ADDRESS NEOMESSAGE_PAR1W mva #STACK_SIZE1 NEOMESSAGE_PAR2W jsr @WaitMessage mva #MATH_COS NEOMESSAGE_FUNC mva #MATH_GROUP NEOMESSAGE_GROUP - mva VAR_ADDRESS+1 result - mva VAR_ADDRESS+2 result+1 - mva VAR_ADDRESS+3 result+2 - mva VAR_ADDRESS+4 result+3 + mva VAR0_B0 result + mva VAR0_B1 result+1 + mva VAR0_B2 result+2 + mva VAR0_B3 result+3 end; {$else} Result := fsincos(x, true);