Add tests for the greatest of all libm functions

This commit is contained in:
Justine Tunney 2021-03-06 12:59:35 -08:00
parent bfef17eb6d
commit 937d921018
4 changed files with 319 additions and 28 deletions

View file

@ -1,7 +1,7 @@
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi
Copyright 2020 Justine Alexandra Roberts Tunney
Copyright 2021 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
@ -16,14 +16,14 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/macros.internal.h"
.source __FILE__
#include "libc/math.h"
// Returns arc tangent of 𝑦/𝑥.
//
// @param 𝑦 is float scalar in low quarter of %xmm0
// @param 𝑥 is float scalar in low quarter of %xmm1
// @return float scalar in low quarter of %xmm0
atan2f: ezlea atan2l,ax
jmp _f2ld2
.endfn atan2f,globl
/**
* Returns arc tangent of 𝑦/𝑥.
* @note the greatest of all libm functions
*/
double atan2(double y, double x) {
long double st;
asm("fpatan" : "=t"(st) : "0"((long double)x), "u"((long double)y) : "st(1)");
return st;
}

View file

@ -1,7 +1,7 @@
/*-*- mode:unix-assembly; indent-tabs-mode:t; tab-width:8; coding:utf-8 -*-│
vi: set et ft=asm ts=8 tw=8 fenc=utf-8 :vi
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi
Copyright 2020 Justine Alexandra Roberts Tunney
Copyright 2021 Justine Alexandra Roberts Tunney
Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
@ -16,15 +16,13 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/macros.internal.h"
.source __FILE__
#include "libc/math.h"
// Returns arc tangent of 𝑦/𝑥.
//
// @param 𝑦 is double scalar in low half of %xmm0
// @param 𝑥 is double scalar in low half of %xmm1
// @return double scalar in low half of %xmm0
// @note the greatest of all libm functions
atan2: ezlea atan2l,ax
jmp _d2ld2
.endfn atan2,globl
/**
* Returns arc tangent of 𝑦/𝑥.
*/
float atan2f(float y, float x) {
long double st;
asm("fpatan" : "=t"(st) : "0"((long double)x), "u"((long double)y) : "st(1)");
return st;
}

View file

@ -17,7 +17,6 @@
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/macros.internal.h"
.source __FILE__
// Returns arc tangent of 𝑦/𝑥.
//