|
1 | | -// |
| 1 | +// |
2 | 2 | // Copyright (c) .NET Foundation and Contributors |
3 | 3 | // Portions Copyright (c) Microsoft Corporation. All rights reserved. |
4 | 4 | // See LICENSE file in the project root for full license information. |
|
7 | 7 | #include "CorLib.h" |
8 | 8 | #include <nanoCLR_Interop.h> |
9 | 9 |
|
| 10 | +///////////////////////////////////////////////////////////////////////// |
| 11 | +// !!! KEEP IN SYNC WITH DateTime._ticksAtOrigin (in managed code) !!! // |
| 12 | +///////////////////////////////////////////////////////////////////////// |
| 13 | +#define TICKS_AT_ORIGIN 504911232000000000 |
| 14 | + |
10 | 15 | /////////////////////////////////////////////////////////////////////// |
11 | 16 | // !!! KEEP IN SYNC WITH DateTime.DateTimePart (in managed code) !!! // |
12 | 17 | /////////////////////////////////////////////////////////////////////// |
@@ -147,60 +152,30 @@ HRESULT Library_corlib_native_System_DateTime::DaysInMonth___STATIC__I4__I4__I4( |
147 | 152 | NANOCLR_NOCLEANUP(); |
148 | 153 | } |
149 | 154 |
|
150 | | -HRESULT Library_corlib_native_System_DateTime::get_UtcNow___STATIC__SystemDateTime(CLR_RT_StackFrame &stack) |
| 155 | +HRESULT Library_corlib_native_System_DateTime::GetUtcNowAsTicks___STATIC__I8(CLR_RT_StackFrame &stack) |
151 | 156 | { |
152 | | - NATIVE_PROFILE_CLR_CORE(); |
153 | 157 | NANOCLR_HEADER(); |
154 | 158 |
|
155 | | - CLR_INT64 *val; |
156 | | - |
157 | | - CLR_RT_HeapBlock &ref = stack.PushValue(); |
158 | | - |
159 | | - val = Library_corlib_native_System_DateTime::NewObject(ref); |
160 | | - FAULT_ON_NULL(val); |
161 | | - |
162 | | - // load with full date&time |
163 | | - // including UTC flag |
164 | | - *val = (CLR_INT64)(HAL_Time_CurrentDateTime(false) | s_UTCMask); |
| 159 | + CLR_INT64 value = HAL_Time_CurrentDateTime(false); |
| 160 | + value += TICKS_AT_ORIGIN; |
| 161 | + stack.SetResult_I8(value); |
165 | 162 |
|
166 | | - NANOCLR_NOCLEANUP(); |
| 163 | + NANOCLR_NOCLEANUP_NOLABEL(); |
167 | 164 | } |
168 | 165 |
|
169 | | -HRESULT Library_corlib_native_System_DateTime::get_Today___STATIC__SystemDateTime(CLR_RT_StackFrame &stack) |
| 166 | +HRESULT Library_corlib_native_System_DateTime::GetTodayAsTicks___STATIC__I8(CLR_RT_StackFrame &stack) |
170 | 167 | { |
171 | | - NATIVE_PROFILE_CLR_CORE(); |
172 | 168 | NANOCLR_HEADER(); |
173 | 169 |
|
174 | | - CLR_RT_HeapBlock &ref = stack.PushValue(); |
175 | | - |
176 | | - CLR_INT64 *val = NewObject(ref); |
177 | | - |
178 | | - // load with date part only |
179 | | - // including UTC flag |
180 | | - *val = (CLR_INT64)(HAL_Time_CurrentDateTime(true) | s_UTCMask); |
| 170 | + CLR_INT64 value = HAL_Time_CurrentDateTime(true); |
| 171 | + value += TICKS_AT_ORIGIN; |
| 172 | + stack.SetResult_I8(value); |
181 | 173 |
|
182 | 174 | NANOCLR_NOCLEANUP_NOLABEL(); |
183 | 175 | } |
184 | 176 |
|
185 | 177 | //--// |
186 | 178 |
|
187 | | -CLR_INT64 *Library_corlib_native_System_DateTime::NewObject(CLR_RT_HeapBlock &ref) |
188 | | -{ |
189 | | - NATIVE_PROFILE_CLR_CORE(); |
190 | | - |
191 | | - CLR_RT_TypeDescriptor dtType; |
192 | | - |
193 | | - // initialize <DateTime> type descriptor |
194 | | - dtType.InitializeFromType(g_CLR_RT_WellKnownTypes.m_DateTime); |
195 | | - |
196 | | - // create an instance of <DateTime> |
197 | | - g_CLR_RT_ExecutionEngine.NewObject(ref, dtType.m_handlerCls); |
198 | | - |
199 | | - return GetValuePtr(ref); |
200 | | -} |
201 | | - |
202 | | -//--// |
203 | | - |
204 | 179 | CLR_INT64 *Library_corlib_native_System_DateTime::GetValuePtr(CLR_RT_StackFrame &stack) |
205 | 180 | { |
206 | 181 | NATIVE_PROFILE_CLR_CORE(); |
|
0 commit comments