Index: testsuites/ada/sptests/sp19/Makefile.am
===================================================================
--- testsuites/ada/sptests/sp19/Makefile.am	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
+++ testsuites/ada/sptests/sp19/Makefile.am	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
@@ -0,0 +1,20 @@
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+
+include $(top_srcdir)/ada.am
+
+AM_ADAFLAGS += -I.
+
+noinst_PROGRAMS = ada_sp19
+ada_sp19_SOURCES = sp19.adb sptest.adb config.h sptest.ads
+ada_sp19_SOURCES += ../../support/init.c
+
+CLEANFILES += sptest.adb
+
+ada_sp19$(EXEEXT): sp19.adb sptest.adb sptest.ads init.$(OBJEXT)
+	$(GNATCOMPILE) -margs -a $< -o $@
+
+scndir = $(rtems_ada_testsdir)
+dist_scn_DATA = ada_sp19.scn
+
+include $(top_srcdir)/../automake/local.am
Index: testsuites/ada/sptests/sp19/README
===================================================================
--- testsuites/ada/sptests/sp19/README	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
+++ testsuites/ada/sptests/sp19/README	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
@@ -0,0 +1,19 @@
+This is a "problem" test in Ada versus the C equivalent.  In C,
+we used macros to :
+
+  + declare a LOT of local integer and floating point variables
+  + load them with values
+  + check them at certain times
+  + to avoid floating point operations on CPUs w/o hardware support
+
+The macros are not equivalent to subprograms doing the same thing.
+We are trying to insure that the register set is fully utilized and
+checking that it survives context switches.  If the routines are
+subprograms, then calling conventions and scoping rules apply.  Thus
+the variables do not exist throughout the entire life of the task
+as in the C test.
+
+It seems to point out that although the conditional compilation
+and macro capabilities of C are often abused, they do provide
+capabilities which are difficult if not impossible to mimic entirely
+with subprograms.  
Index: testsuites/ada/sptests/sp19/ada_sp19.scn
===================================================================
--- testsuites/ada/sptests/sp19/ada_sp19.scn	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
+++ testsuites/ada/sptests/sp19/ada_sp19.scn	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
@@ -0,0 +1,55 @@
+*** TEST 19 ***
+FP1  - integer base = (   16#6000#)
+FP1  - float base = ( 6.00060E+03)
+FP1  - integer base = (   16#6000#)
+FP1  - float base = ( 6.00060E+03)
+TA1  - integer base = (   16#1000#)
+TA1  - clock_get -  9: 0: 0   12/31/1988
+TA2  - integer base = (   16#2000#)
+TA2  - clock_get -  9: 0: 0   12/31/1988
+TA3  - integer base = (   16#3000#)
+TA3  - clock_get -  9: 0: 0   12/31/1988
+TA4  - integer base = (   16#4000#)
+TA4  - float base = ( 4.00040E+03)
+TA4  - clock_get -  9: 0: 0   12/31/1988
+TA5  - integer base = (   16#5000#)
+TA5  - float base = ( 5.00050E+03)
+TA5  - clock_get -  9: 0: 0   12/31/1988
+TA4  - clock_get -  9: 0: 1   12/31/1988
+TA5  - clock_get -  9: 0: 1   12/31/1988
+TA4  - clock_get -  9: 0: 2   12/31/1988
+TA5  - clock_get -  9: 0: 2   12/31/1988
+TA4  - clock_get -  9: 0: 3   12/31/1988
+TA5  - clock_get -  9: 0: 3   12/31/1988
+TA4  - clock_get -  9: 0: 4   12/31/1988
+TA5  - clock_get -  9: 0: 4   12/31/1988
+TA1  - clock_get -  9: 0: 5   12/31/1988
+TA4  - clock_get -  9: 0: 5   12/31/1988
+TA5  - clock_get -  9: 0: 5   12/31/1988
+TA4  - clock_get -  9: 0: 6   12/31/1988
+TA5  - clock_get -  9: 0: 6   12/31/1988
+TA4  - clock_get -  9: 0: 7   12/31/1988
+TA5  - clock_get -  9: 0: 7   12/31/1988
+TA4  - clock_get -  9: 0: 8   12/31/1988
+TA5  - clock_get -  9: 0: 8   12/31/1988
+TA4  - clock_get -  9: 0: 9   12/31/1988
+TA5  - clock_get -  9: 0: 9   12/31/1988
+TA2  - clock_get -  9: 0:10   12/31/1988
+TA1  - clock_get -  9: 0:10   12/31/1988
+TA4  - clock_get -  9: 0:10   12/31/1988
+TA5  - clock_get -  9: 0:10   12/31/1988
+TA4  - clock_get -  9: 0:11   12/31/1988
+TA5  - clock_get -  9: 0:11   12/31/1988
+TA4  - clock_get -  9: 0:12   12/31/1988
+TA5  - clock_get -  9: 0:12   12/31/1988
+TA4  - clock_get -  9: 0:13   12/31/1988
+TA5  - clock_get -  9: 0:13   12/31/1988
+TA4  - clock_get -  9: 0:14   12/31/1988
+TA5  - clock_get -  9: 0:14   12/31/1988
+TA1  - clock_get -  9: 0:15   12/31/1988
+TA3  - clock_get -  9: 0:15   12/31/1988
+TA4  - clock_get -  9: 0:15   12/31/1988
+TA5  - clock_get -  9: 0:15   12/31/1988
+TA4 - task_delete - self
+TA5 - task_delete - TA3
+*** END OF TEST 19 ***
Index: testsuites/ada/sptests/sp19/config.h
===================================================================
--- testsuites/ada/sptests/sp19/config.h	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
+++ testsuites/ada/sptests/sp19/config.h	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
@@ -0,0 +1,30 @@
+/*  config.h
+ *
+ *  This include file defines the Configuration Table for this test.
+ *
+ *  COPYRIGHT (c) 1989-2007.
+ *  On-Line Applications Research Corporation (OAR).
+ *
+ *  The license and distribution terms for this file may in
+ *  the file LICENSE in this distribution or at
+ *  http://www.rtems.org/license/LICENSE.
+ */
+
+
+/* configuration information */
+
+#define CONFIGURE_SPTEST
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS              10
+#define CONFIGURE_MAXIMUM_POSIX_KEYS                 10
+
+#define CONFIGURE_MAXIMUM_TASKS             7
+
+#include <rtems/confdefs.h>
+
+/* end of include file */
Index: testsuites/ada/sptests/sp19/sp19.adb
===================================================================
--- testsuites/ada/sptests/sp19/sp19.adb	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
+++ testsuites/ada/sptests/sp19/sp19.adb	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
@@ -0,0 +1,55 @@
+--
+--  MAIN / BODY
+--
+--  DESCRIPTION:
+--
+--  This is the entry point for Test SP19 of the Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989-2011.
+--  On-Line Applications Research Corporation (OAR).
+--
+--  The license and distribution terms for this file may in
+--  the file LICENSE in this distribution or at
+--  http://www.rtems.org/license/LICENSE.
+--
+
+with RTEMS;
+with RTEMS.TASKS;
+with SPTEST;
+with TEST_SUPPORT;
+
+procedure SP19 is
+  INIT_ID : RTEMS.ID;
+  STATUS  : RTEMS.STATUS_CODES;
+begin
+
+   RTEMS.TASKS.CREATE(
+      RTEMS.BUILD_NAME(  'I', 'N', 'I', 'T' ),
+      1,
+      RTEMS.MINIMUM_STACK_SIZE,
+      RTEMS.NO_PREEMPT,
+      RTEMS.FLOATING_POINT,
+      INIT_ID,
+      STATUS
+   );
+   TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF INIT" );
+
+
+   RTEMS.TASKS.START(
+      INIT_ID,
+      SPTEST.INIT'ACCESS,
+      0,
+      STATUS
+   );
+   TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF INIT" );
+
+   loop
+      delay 120.0;
+   end loop;
+
+end SP19;
+
Index: testsuites/ada/sptests/sp19/sptest.adp
===================================================================
--- testsuites/ada/sptests/sp19/sptest.adp	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
+++ testsuites/ada/sptests/sp19/sptest.adp	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
@@ -0,0 +1,397 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 19 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--
+
+with INTERFACES; use INTERFACES;
+with FLOAT_IO;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+with RTEMS.CLOCK;
+
+include(../../support/fp.inc)
+include(../../support/integer.inc)
+
+package body SPTEST is
+
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
+   ) is
+      pragma Unreferenced(ARGUMENT);
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 19 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
+      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
+      SPTEST.TASK_NAME( 6 ) := RTEMS.BUILD_NAME(  'F', 'P', '1', ' ' );
+
+      RTEMS.TASKS.CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         2, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.FLOATING_POINT,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASKS.CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         2, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASKS.CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         2, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASKS.CREATE( 
+         SPTEST.TASK_NAME( 4 ), 
+         2, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.FLOATING_POINT,
+         SPTEST.TASK_ID( 4 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+
+      RTEMS.TASKS.CREATE( 
+         SPTEST.TASK_NAME( 5 ), 
+         2, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.FLOATING_POINT,
+         SPTEST.TASK_ID( 5 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
+
+      RTEMS.TASKS.CREATE( 
+         SPTEST.TASK_NAME( 6 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.FLOATING_POINT,
+         SPTEST.TASK_ID( 6 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF FP1" );
+
+      RTEMS.TASKS.START(
+         SPTEST.TASK_ID( 6 ),
+         SPTEST.FIRST_FP_TASK'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF FP1" );
+
+      RTEMS.TASKS.START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASKS.START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASKS.START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      RTEMS.TASKS.START(
+         SPTEST.TASK_ID( 4 ),
+         SPTEST.FP_TASK'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+      RTEMS.TASKS.START(
+         SPTEST.TASK_ID( 5 ),
+         SPTEST.FP_TASK'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
+
+      --
+      --  Load "task dependent factors" in the context areas
+      --
+
+      SPTEST.FP_FACTORS( 0 ) :=    0.0;
+      SPTEST.FP_FACTORS( 1 ) := 1000.1;
+      SPTEST.FP_FACTORS( 2 ) := 2000.2;
+      SPTEST.FP_FACTORS( 3 ) := 3000.3;
+      SPTEST.FP_FACTORS( 4 ) := 4000.4;
+      SPTEST.FP_FACTORS( 5 ) := 5000.5;
+      SPTEST.FP_FACTORS( 6 ) := 6000.6;
+      SPTEST.FP_FACTORS( 7 ) := 7000.7;
+      SPTEST.FP_FACTORS( 8 ) := 8000.8;
+      SPTEST.FP_FACTORS( 9 ) := 9000.9;
+
+      SPTEST.INTEGER_FACTORS( 0 ) := 16#0000#;
+      SPTEST.INTEGER_FACTORS( 1 ) := 16#1000#;
+      SPTEST.INTEGER_FACTORS( 2 ) := 16#2000#;
+      SPTEST.INTEGER_FACTORS( 3 ) := 16#3000#;
+      SPTEST.INTEGER_FACTORS( 4 ) := 16#4000#;
+      SPTEST.INTEGER_FACTORS( 5 ) := 16#5000#;
+      SPTEST.INTEGER_FACTORS( 6 ) := 16#6000#;
+      SPTEST.INTEGER_FACTORS( 7 ) := 16#7000#;
+      SPTEST.INTEGER_FACTORS( 8 ) := 16#8000#;
+      SPTEST.INTEGER_FACTORS( 9 ) := 16#9000#;
+
+      RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+-- 
+--  FIRST_FP_TASK
+--
+
+   procedure FIRST_FP_TASK (
+      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
+   ) is
+      STATUS     : RTEMS.STATUS_CODES;
+      TID        : RTEMS.ID;
+      TIME       : RTEMS.TIME_OF_DAY;
+      TASK_INDEX : RTEMS.UNSIGNED32;
+      INTEGER_DECLARE;
+      FP_DECLARE;
+   begin
+
+      RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+
+      TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID );
+   
+      INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) );
+      FP_LOAD( FP_FACTORS( TASK_INDEX ) );
+
+      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( TASK_INDEX ), FALSE );
+      TEXT_IO.PUT( " - integer base = (" );
+      UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 );
+      TEXT_IO.PUT_LINE( ")" );
+
+      --
+      --  C implementation prints NA if no hardware FP support.
+      --
+
+      TEST_SUPPORT.PUT_NAME( 
+         SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+         FALSE
+      );
+      TEXT_IO.PUT( " - float base = (" );
+      FLOAT_IO.PUT( FP_FACTORS( TASK_INDEX ) );
+      TEXT_IO.PUT_LINE( ")" );
+
+      FP_CHECK( FP_FACTORS( TASK_INDEX ) );
+      INTEGER_CHECK( INTEGER_FACTORS( TASK_INDEX ) );
+      if ARGUMENT = 0 then
+         RTEMS.TASKS.RESTART( 
+            RTEMS.SELF,
+            1,
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF SELF" );
+      else
+         TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+         RTEMS.CLOCK.SET( TIME, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+         RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+      end if;
+
+   end FIRST_FP_TASK;
+
+-- 
+--  FP_TASK
+--
+
+   procedure FP_TASK (
+      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
+   ) is
+      pragma Unreferenced(ARGUMENT);
+      STATUS     : RTEMS.STATUS_CODES;
+      TID        : RTEMS.ID;
+      TIME       : RTEMS.TIME_OF_DAY;
+      TASK_INDEX : RTEMS.UNSIGNED32;
+      INTEGER_DECLARE;
+      FP_DECLARE;
+   begin
+
+      RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+   
+      TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID );
+  
+      INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) );
+      FP_LOAD( FP_FACTORS( TASK_INDEX ) );
+ 
+      TEST_SUPPORT.PUT_NAME(
+         SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+         FALSE
+      );
+      TEXT_IO.PUT( " - integer base = (" );
+      UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 );
+      TEXT_IO.PUT_LINE( ")" );
+ 
+      --
+      --  C implementation prints NA if no hardware FP support.
+      --
+ 
+      TEST_SUPPORT.PUT_NAME(
+         SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+         FALSE
+      );
+      TEXT_IO.PUT( " - float base = (" );
+      FLOAT_IO.PUT( FP_FACTORS( TASK_INDEX ) );
+      TEXT_IO.PUT_LINE( ")" );
+
+      loop
+
+         RTEMS.CLOCK.GET_TOD( TIME, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
+
+         if TIME.SECOND >= 16 then
+
+            if TEST_SUPPORT.TASK_NUMBER( TID ) = 4 then
+               TEXT_IO.PUT_LINE( "TA4 - task_delete - self" );
+               RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
+               TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
+            end if;
+      
+            TEXT_IO.PUT_LINE( "TA5 - task_delete - TA3" );
+            RTEMS.TASKS.DELETE( SPTEST.TASK_ID( 3 ), STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+ 
+            TEXT_IO.PUT_LINE( "*** END OF TEST 19 ***" );
+            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+         end if;
+
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+            FALSE
+         );
+
+         TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" );
+         TEXT_IO.NEW_LINE;
+
+         INTEGER_CHECK( INTEGER_FACTORS( TASK_INDEX ) );
+         FP_CHECK( FP_FACTORS( TASK_INDEX ) );
+ 
+         RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+      end loop;
+   
+   end FP_TASK;
+
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
+   ) is
+      pragma Unreferenced(ARGUMENT);
+      STATUS     : RTEMS.STATUS_CODES;
+      TID        : RTEMS.ID;
+      TIME       : RTEMS.TIME_OF_DAY;
+      TASK_INDEX : RTEMS.UNSIGNED32;
+      INTEGER_DECLARE;
+      FP_DECLARE;
+   begin
+
+      RTEMS.TASKS.IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+   
+      TASK_INDEX := TEST_SUPPORT.TASK_NUMBER( TID );
+  
+      INTEGER_LOAD( INTEGER_FACTORS( TASK_INDEX ) );
+      FP_LOAD( FP_FACTORS( TASK_INDEX ) );
+ 
+      TEST_SUPPORT.PUT_NAME(
+         SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+         FALSE
+      );
+      TEXT_IO.PUT( " - integer base = (" );
+      UNSIGNED32_IO.PUT( INTEGER_FACTORS( TASK_INDEX ), BASE => 16 );
+      TEXT_IO.PUT_LINE( ")" );
+ 
+      loop
+
+         RTEMS.CLOCK.GET_TOD( TIME, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET_TOD" );
+
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+            FALSE
+         );
+
+         TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" );
+         TEXT_IO.NEW_LINE;
+
+         INTEGER_CHECK( INTEGER_FACTORS( TASK_INDEX ) );
+         FP_CHECK( FP_FACTORS( TASK_INDEX ) );
+
+         RTEMS.TASKS.WAKE_AFTER( 
+            TEST_SUPPORT.TASK_NUMBER( TID ) * 5 * 
+              TEST_SUPPORT.TICKS_PER_SECOND, 
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+      end loop;
+   
+   end TASK_1;
+
+end SPTEST;
Index: testsuites/ada/sptests/sp19/sptest.ads
===================================================================
--- testsuites/ada/sptests/sp19/sptest.ads	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
+++ testsuites/ada/sptests/sp19/sptest.ads	(revision ee537ea3dd964d4de3565a36b4857af31fb5a3f4)
@@ -0,0 +1,119 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 19 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989-2011.
+--  On-Line Applications Research Corporation (OAR).
+--
+--  The license and distribution terms for this file may in
+--  the file LICENSE in this distribution or at
+--  http://www.rtems.org/license/LICENSE.
+--
+
+with RTEMS;
+with RTEMS.TASKS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.NAME;
+
+--
+--  This array contains the floating point factors used by the
+--  floating point tasks in this test.
+--
+
+   FP_FACTORS : array ( RTEMS.UNSIGNED32 range 0 .. 9 ) of FLOAT;
+
+--
+--  This array contains the integer factors used by the
+--  integer tasks in this test.
+--
+
+   INTEGER_FACTORS : array ( RTEMS.UNSIGNED32 range 0 .. 9 ) of 
+      RTEMS.UNSIGNED32;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
+   );
+   pragma Convention (C, INIT);
+
+--
+--  FIRST_FP_TASK
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the restart and deletion of floating point tasks.
+--
+
+   procedure FIRST_FP_TASK (
+      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
+   );
+   pragma Convention (C, FIRST_FP_TASK);
+
+--
+--  FP_TASK
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the basic capabilities of a floating point
+--  task.
+--
+
+   procedure FP_TASK (
+      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
+   );
+   pragma Convention (C, FP_TASK);
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task provides a non-floating point task to test
+--  that an application can utilize a mixture of floating point
+--  and non-floating point tasks.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
+   );
+   pragma Convention (C, TASK_1);
+
+--
+--  Add_Float
+--
+--  DESCRIPTION:
+--
+--  This method ensures the compilers thinks we are using the variables.
+--
+
+   function Add_Float(
+     n      : in Float;
+     factor : in Float
+   ) return Float;
+   pragma Interface (C, Add_Float);
+   pragma Interface_Name (Add_Float, "add_float");
+
+end SPTEST;
