1/* Implementation of the CPU_TIME intrinsic. 2 Copyright (C) 2003-2020 Free Software Foundation, Inc. 3 4This file is part of the GNU Fortran runtime library (libgfortran). 5 6Libgfortran is free software; you can redistribute it and/or 7modify it under the terms of the GNU General Public 8License as published by the Free Software Foundation; either 9version 3 of the License, or (at your option) any later version. 10 11Libgfortran is distributed in the hope that it will be useful, 12but WITHOUT ANY WARRANTY; without even the implied warranty of 13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14GNU General Public License for more details. 15 16Under Section 7 of GPL version 3, you are granted additional 17permissions described in the GCC Runtime Library Exception, version 183.1, as published by the Free Software Foundation. 19 20You should have received a copy of the GNU General Public License and 21a copy of the GCC Runtime Library Exception along with this program; 22see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23<http://www.gnu.org/licenses/>. */ 24 25#include "libgfortran.h" 26#include "time_1.h" 27 28 29static void 30__cpu_time_1 (long *sec, long *usec) 31{ 32 long user_sec, user_usec, system_sec, system_usec; 33 if (gf_cputime (&user_sec, &user_usec, &system_sec, &system_usec) == 0) 34 { 35 *sec = user_sec + system_sec; 36 *usec = user_usec + system_usec; 37 } 38 else 39 { 40 *sec = -1; 41 *usec = 0; 42 } 43} 44 45 46extern void cpu_time_4 (GFC_REAL_4 *); 47iexport_proto(cpu_time_4); 48 49void cpu_time_4 (GFC_REAL_4 *time) 50{ 51 long sec, usec; 52 __cpu_time_1 (&sec, &usec); 53 *time = sec + usec * GFC_REAL_4_LITERAL(1.e-6); 54} 55iexport(cpu_time_4); 56 57extern void cpu_time_8 (GFC_REAL_8 *); 58export_proto(cpu_time_8); 59 60void cpu_time_8 (GFC_REAL_8 *time) 61{ 62 long sec, usec; 63 __cpu_time_1 (&sec, &usec); 64 *time = sec + usec * GFC_REAL_8_LITERAL(1.e-6); 65} 66 67#ifdef HAVE_GFC_REAL_10 68extern void cpu_time_10 (GFC_REAL_10 *); 69export_proto(cpu_time_10); 70 71void cpu_time_10 (GFC_REAL_10 *time) 72{ 73 long sec, usec; 74 __cpu_time_1 (&sec, &usec); 75 *time = sec + usec * GFC_REAL_10_LITERAL(1.e-6); 76} 77#endif 78 79#ifdef HAVE_GFC_REAL_16 80extern void cpu_time_16 (GFC_REAL_16 *); 81export_proto(cpu_time_16); 82 83void cpu_time_16 (GFC_REAL_16 *time) 84{ 85 long sec, usec; 86 __cpu_time_1 (&sec, &usec); 87 *time = sec + usec * GFC_REAL_16_LITERAL(1.e-6); 88} 89#endif 90 91extern void second_sub (GFC_REAL_4 *); 92export_proto(second_sub); 93 94void 95second_sub (GFC_REAL_4 *s) 96{ 97 cpu_time_4 (s); 98} 99 100extern GFC_REAL_4 second (void); 101export_proto(second); 102 103GFC_REAL_4 104second (void) 105{ 106 GFC_REAL_4 s; 107 cpu_time_4 (&s); 108 return s; 109} 110