source: release/1.7/source/lisp-kernel/platform-freebsdx8632.h @ 15267

Last change on this file since 15267 was 13952, checked in by rme, 9 years ago

New scheme for dealing with floating point exceptions on x86-64 systems.

Currently, we mask floating point execptions around all foreign function
calls. While this may not be a huge component of FF call overhead, it
makes sense to avoid doing this for what is presumably an exceptional
case.

We now leave floating point exceptions enabled, but the exception
handler in the lisp kernel is prepared to deal with them: it saves
lisp's MXCSR, masks all floating point exceptions, and resumes
execution (after setting a flag in the TCR to note what it has done).
At the end of .SPffcall, we check this flag. If it is set, we
save the fp exception status, and restore lisp's original MXCSR.

File size: 1.8 KB
Line 
1/*
2   Copyright (C) 2010 Clozure Associates
3   Copyright (C) 1994-2001 Digitool, Inc
4   This file is part of Clozure CL. 
5
6   Clozure CL is licensed under the terms of the Lisp Lesser GNU Public
7   License , known as the LLGPL and distributed with Clozure CL as the
8   file "LICENSE".  The LLGPL consists of a preamble and the LGPL,
9   which is distributed with Clozure CL as the file "LGPL".  Where these
10   conflict, the preamble takes precedence. 
11
12   Clozure CL is referenced in the preamble as the "LIBRARY."
13
14   The LLGPL is also available online at
15   http://opensource.franz.com/preamble.html
16*/
17
18#define WORD_SIZE 32
19#define PLATFORM_OS PLATFORM_OS_FREEBSD
20#define PLATFORM_CPU PLATFORM_CPU_X86
21#define PLATFORM_WORD_SIZE PLATFORM_WORD_SIZE_32
22
23typedef struct __ucontext ExceptionInformation;
24
25#include "standard-inttypes.h"
26
27
28#define MAXIMUM_MAPPABLE_MEMORY (1U<<30)
29#define IMAGE_BASE_ADDRESS 0x30000000
30
31#include "lisptypes.h"
32#include "x86-constants32.h"
33
34#include "freebsdx8632/fpu.h"
35#define xpGPRvector(x) ((natural *)(&((x)->uc_mcontext)))
36#define xpGPR(x,gprno) (xpGPRvector(x)[gprno])
37#define set_xpGPR(x,gpr,new) xpGPR((x),(gpr)) = (natural)(new)
38#define eflags_register(xp) xpGPR(xp,Iflags)
39#define xpPC(x) xpGPR(x,Iip)
40#define xpMMXreg(x,n) *((natural *)(&(((struct ccl_savexmm *)(&(x)->uc_mcontext.mc_fpstate))->sv_fp[n])))
41#define xpXMMregs(x)(&(((struct ccl_savexmm *)(&(x)->uc_mcontext.mc_fpstate))->sv_xmm[0]))
42#define xpMXCSR(x) ((struct savefpu *)((x)->uc_mcontext.mc_fpstate)->sv_env.en_mxcsr)
43extern void freebsd_sigreturn(ExceptionInformation *);
44#define SIGNUM_FOR_INTN_TRAP SIGBUS
45#define IS_MAYBE_INT_TRAP(info,xp) ((xp->uc_mcontext.mc_trapno == T_PROTFLT) && ((xp->uc_mcontext.mc_err & 7) == 2))
46#define IS_PAGE_FAULT(info,xp) (xp->uc_mcontext.mc_trapno == T_PAGEFLT)
47#define SIGRETURN(context) freebsd_sigreturn(context)
48
49#include "os-freebsd.h"
Note: See TracBrowser for help on using the repository browser.