LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

Проверочный код такой:


(in-package :cl-user)

(declaim (optimize (safety 0) (speed 3) (debug 0) (space 0) (compilation-speed 0)))
(proclaim '(optimize (safety 0) (speed 3) (debug 0) (space 0) (compilation-speed 0)))

(defstruct person id name)

(defun funcall-person-id (person)
  (funcall #'person-id (the person person)))

(defun funcall-person-id-2 (person)
  (person-id (the person person)))
Компилируем, загружаем и далее disassemble funcall-pseron-id. Видим:
; disassembly for FUNCALL-PERSON-ID
; Size: 17 bytes. Origin: #x10081F9531
; 31:       84042500000F20   TEST AL, [#x200F0000]            ; safepoint
                                                              ; no-arg-parsing entry point
; 38:       488B510D         MOV RDX, [RCX+13]
; 3C:       488BE5           MOV RSP, RBP
; 3F:       F8               CLC
; 40:       5D               POP RBP
; 41:       C3               RET

Исходная версия den73, :

Проверочный код такой:


(in-package :cl-user)

(declaim (optimize (safety 0) (speed 3) (debug 0) (space 0) (compilation-speed 0)))
(proclaim '(optimize (safety 0) (speed 3) (debug 0) (space 0) (compilation-speed 0)))

(defstruct person id name)

(defun funcall-person-id (person)
  (funcall #'person-id (the person person)))

(defun funcall-person-id-2 (person)
  (person-id (the person person)))
Компилируем и далее disassemble.