forked from Bananymous/banan-os
				
			LibC: add math.h with floorl
This commit is contained in:
		
							parent
							
								
									0d9422ead8
								
							
						
					
					
						commit
						5f89f083a2
					
				|  | @ -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