Browse Source

test case for push(w/l)/pop(w/l) segment registers

pierre 25 years ago
parent
commit
2c86ebf767
1 changed files with 66 additions and 0 deletions
  1. 66 0
      tests/test/testpusw.pp

+ 66 - 0
tests/test/testpusw.pp

@@ -0,0 +1,66 @@
+program test_register_pushing;
+
+var
+  before, after : longint;
+  wpush,lpush : longint;
+const
+  haserror : boolean = false;
+
+begin
+{$ifdef CPUI386}
+{$asmmode att}
+  asm
+    movl   %esp,before
+    pushw  %es
+    movl   %esp,after
+    popw   %es
+  end;
+  wpush:=before-after;
+  if wpush<>2 then
+    begin
+      Writeln('Compiler does not push "pushw %es" into 2 bytes');
+      haserror:=true;
+    end;
+  asm
+    movl   %esp,before
+    pushl  %es
+    movl   %esp,after
+    popl   %es
+  end;
+  lpush:=before-after;
+
+  if lpush<>4 then
+    begin
+      Writeln('Compiler does not push "pushl %es" into 4 bytes');
+      haserror:=true;
+    end;
+
+  asm
+    movl   %esp,before
+    pushw  %gs
+    movl   %esp,after
+    popw   %gs
+  end;
+  wpush:=before-after;
+  if wpush<>2 then
+    begin
+      Writeln('Compiler does not push "pushw %gs" into 2 bytes');
+      haserror:=true;
+    end;
+  asm
+    movl   %esp,before
+    pushl  %gs
+    movl   %esp,after
+    popl   %gs
+  end;
+  lpush:=before-after;
+
+  if lpush<>4 then
+    begin
+      Writeln('Compiler does not push "pushl %gs" into 4 bytes');
+      haserror:=true;
+    end;
+{$endif CPUI386}
+  if haserror then
+    Halt(1);
+end.