From 1a57391e5501893cf169ff7ce8c104e63105f5e7 Mon Sep 17 00:00:00 2001
From: nickysn <nickysn@gmail.com>
Date: Fri, 16 Feb 2018 15:02:06 +0000
Subject: [PATCH] + extended test tasm20.pp with a function, that returns a
 shortstring (in that   particular case, it is allocated a @Result variable)

git-svn-id: trunk@38248 -
---
 tests/test/tasm20.pp | 60 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/tests/test/tasm20.pp b/tests/test/tasm20.pp
index 011bdf53ad..ff6a8b22c0 100644
--- a/tests/test/tasm20.pp
+++ b/tests/test/tasm20.pp
@@ -2,8 +2,35 @@
 
 {$IFDEF FPC}
 {$MODE TP}
+{$ELSE}
+{$DEFINE FPC_MM_LARGE}
 {$ENDIF FPC}
 
+{$IFDEF FPC_MM_TINY}
+  {$DEFINE NEAR_CODE}
+  {$DEFINE NEAR_DATA}
+{$ENDIF}
+{$IFDEF FPC_MM_SMALL}
+  {$DEFINE NEAR_CODE}
+  {$DEFINE NEAR_DATA}
+{$ENDIF}
+{$IFDEF FPC_MM_MEDIUM}
+  {$DEFINE FAR_CODE}
+  {$DEFINE NEAR_DATA}
+{$ENDIF}
+{$IFDEF FPC_MM_COMPACT}
+  {$DEFINE NEAR_CODE}
+  {$DEFINE FAR_DATA}
+{$ENDIF}
+{$IFDEF FPC_MM_LARGE}
+  {$DEFINE FAR_CODE}
+  {$DEFINE FAR_DATA}
+{$ENDIF}
+{$IFDEF FPC_MM_HUGE}
+  {$DEFINE FAR_CODE}
+  {$DEFINE FAR_DATA}
+{$ENDIF}
+
 program tasm20;
 
 {$S-}
@@ -17,6 +44,7 @@ var
 {$ifdef FPC}
   res3: int64;
 {$endif FPC}
+  res4: string;
   expect_sp: word;
   actual_sp: word;
 
@@ -49,6 +77,35 @@ asm
 end;
 {$endif FPC}
 
+function myfunc4: string; assembler;
+asm
+  mov actual_sp, sp
+  cld
+{$IFDEF FAR_DATA}
+  les di, @Result
+{$ELSE}
+  mov di, @Result
+  push ds
+  pop es
+{$ENDIF}
+  mov al, 7  { string length }
+  stosb
+  mov al, 'T'
+  stosb
+  mov al, 'r'
+  stosb
+  mov al, 'a'
+  stosb
+  mov al, 'l'
+  stosb
+  mov al, 'a'
+  stosb
+  mov al, 'l'
+  stosb
+  mov al, 'a'
+  stosb
+end;
+
 procedure Error;
 begin
   Writeln('Error!');
@@ -68,5 +125,8 @@ begin
   if (res3 <> $123456789ABCDEF0) or (expect_sp <> actual_sp) then
     Error;
 {$endif FPC}
+  res4 := myfunc4;
+  if (res4 <> 'Tralala') and ((expect_sp - actual_sp) <> (2 + SizeOf(Pointer))) then
+    Error;
   Writeln('Ok!');
 end.