Make boxed SSE packs untyped for all purposes but printing.

Now the following rules hold:

- (type-of pack) = SSE-PACK
- (typep pack '*-SSE-PACK) = T

The compiler is tweaked to unbox unidentified packs as
__m128i (integer), assuming that a cast would be inserted
later if that is not what was needed.
This commit is contained in:
Alexander Gavrilov 2010-08-27 18:23:23 +04:00 committed by Juan Jose Garcia Ripoll
parent 8f835233d6
commit 03049ee7e2
9 changed files with 16 additions and 54 deletions

View file

@ -78,11 +78,6 @@
:wchar
(character "ecl_character" "CODE_CHAR" "ecl_char_code" "CHAR_CODE")
#+sse2
:int-sse-pack
#+sse2
(ext:int-sse-pack "__m128i" "ecl_make_int_sse_pack"
"ecl_unbox_int_sse_pack" "ecl_unbox_int_sse_pack_unsafe")
#+sse2
:float-sse-pack
#+sse2
(ext:float-sse-pack "__m128" "ecl_make_float_sse_pack"
@ -92,6 +87,11 @@
#+sse2
(ext:double-sse-pack "__m128d" "ecl_make_double_sse_pack"
"ecl_unbox_double_sse_pack" "ecl_unbox_double_sse_pack_unsafe")
#+sse2
:int-sse-pack
#+sse2
(ext:sse-pack #|<-intentional|# "__m128i" "ecl_make_int_sse_pack"
"ecl_unbox_int_sse_pack" "ecl_unbox_int_sse_pack_unsafe")
:object
(t "cl_object")
:bool
@ -148,7 +148,11 @@
for rep-type = (first record)
for information = (second record)
do (setf (gethash rep-type table) information)
finally (return table)))
finally (progn
#+sse2 ; hack: sse-pack -> int, but int -> int-sse-pack
(setf (gethash :int-sse-pack table)
(list* 'ext:int-sse-pack (cdr (gethash :int-sse-pack table))))
(return table))))
(defun c-number-rep-type-p (rep-type)
(member rep-type +all-number-rep-types+))

View file

@ -61,7 +61,7 @@
#+clos
(STRUCTURE-OBJECT 'STRUCTURE-OBJECT)
#+sse2
((EXT:INT-SSE-PACK EXT:FLOAT-SSE-PACK EXT:DOUBLE-SSE-PACK) type)
((EXT:SSE-PACK EXT:INT-SSE-PACK EXT:FLOAT-SSE-PACK EXT:DOUBLE-SSE-PACK) type)
(t t))))
(defun valid-type-specifier (type)