--- a/src/runtime/x86-64-bsd-os.h
+++ b/src/runtime/x86-64-bsd-os.h
@@ -3,6 +3,10 @@
 
 #ifdef LISP_FEATURE_FREEBSD
 #include <machine/fpu.h>
+#endif
+
+#ifdef LISP_FEATURE_DRAGONFLY
+#include <machine/npx.h>
 #endif
 
 typedef register_t os_context_register_t;
@@ -16,7 +20,7 @@
  * store signal context information, but at least they tend to use the
  * same stems to name the structure fields, so by using this macro we
  * can share a fair amount of code between different variants. */
-#if defined LISP_FEATURE_FREEBSD
+#if defined LISP_FEATURE_FREEBSD || defined(__DragonFly__)
 #define CONTEXT_ADDR_FROM_STEM(stem) &context->uc_mcontext.mc_ ## stem
 #elif defined(__OpenBSD__)
 #define CONTEXT_ADDR_FROM_STEM(stem) &context->sc_ ## stem
@@ -24,6 +28,24 @@
 #define CONTEXT_ADDR_FROM_STEM(stem) &((context)->uc_mcontext.__gregs[_REG_ ## stem])
 #else
 #error unsupported BSD variant
+#endif
+
+#if defined LISP_FEATURE_DRAGONFLY
+/* I am not sure if following definition is needed after this:
+   http://gitweb.dragonflybsd.org/dragonfly.git/commit/e6e019a801e99ba7888ed009c5c3b3c7b047af1e
+
+   But It will not harm if I leave it here. */
+#define RESTORE_FP_CONTROL_FROM_CONTEXT
+void os_restore_fp_control(os_context_t *context);
+
+#define X86_64_SIGFPE_FIXUP
+
+static inline unsigned int *
+arch_os_context_mxcsr_addr(os_context_t *context)
+{
+    struct envxmm *ex = (struct envxmm *)(&context->uc_mcontext.mc_fpregs);
+    return &ex->en_mxcsr;
+}
 #endif
 
 #if defined LISP_FEATURE_FREEBSD