LibC: add math.h with floorl
This commit is contained in:
		
							parent
							
								
									13fabcc1f1
								
							
						
					
					
						commit
						ac12132ac0
					
				| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
cmake_minimum_required(VERSION 3.26)
 | 
			
		||||
 | 
			
		||||
project(libc CXX)
 | 
			
		||||
project(libc CXX ASM)
 | 
			
		||||
 | 
			
		||||
set(LIBC_SOURCES
 | 
			
		||||
	ctype.cpp
 | 
			
		||||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ set(LIBC_SOURCES
 | 
			
		|||
	stdlib.cpp
 | 
			
		||||
	string.cpp
 | 
			
		||||
	unistd.cpp
 | 
			
		||||
	math.S
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_custom_target(libc-headers
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <sys/cdefs.h>
 | 
			
		||||
 | 
			
		||||
__BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
long double floorl(long double);
 | 
			
		||||
 | 
			
		||||
__END_DECLS
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
 | 
			
		||||
.global floorl;
 | 
			
		||||
floorl:
 | 
			
		||||
	fldt	8(%rsp)
 | 
			
		||||
 | 
			
		||||
	fnstenv	-28(%rsp)		/* store fpu environment */
 | 
			
		||||
 | 
			
		||||
	/* We use here %edx although only the low 1 bits are defined.
 | 
			
		||||
	  But none of the operations should care and they are faster
 | 
			
		||||
	  than the 16 bit operations.  */
 | 
			
		||||
	movl	$0x400,%edx		/* round towards -oo */
 | 
			
		||||
	orl	-28(%rsp),%edx
 | 
			
		||||
	andl	$0xf7ff,%edx
 | 
			
		||||
	movl	%edx,-32(%rsp)
 | 
			
		||||
	fldcw	-32(%rsp)		/* load modified control word */
 | 
			
		||||
 | 
			
		||||
	frndint				/* round */
 | 
			
		||||
 | 
			
		||||
	/* Preserve "invalid" exceptions from sNaN input.  */
 | 
			
		||||
	fnstsw
 | 
			
		||||
	andl	$0x1, %eax
 | 
			
		||||
	orl	%eax, -24(%rsp)
 | 
			
		||||
 | 
			
		||||
	fldenv	-28(%rsp)		/* restore original environment */
 | 
			
		||||
 | 
			
		||||
	ret
 | 
			
		||||
		Loading…
	
		Reference in New Issue