Changeset 5212


Ignore:
Timestamp:
Sep 18, 2006, 11:36:30 PM (18 years ago)
Author:
Gary Byers
Message:

More changes; hard to bootstrap.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-1/l1-streams.lisp

    r5208 r5212  
    372372  (encode-output-function nil)
    373373  (decode-input-function nil)
    374   (read-char-no-hang-function nil)
     374  (read-char-when-locked-function nil)
    375375  (write-simple-string-function 'ioblock-no-char-output)
    376376  (character-read-vector-function 'ioblock-no-char-input)
    377377  (read-line-function 'ioblock-no-char-input)
     378  (write-char-when-locked-function nil)
     379  (read-byte-when-locked-function nil)
     380  (write-byte-when-locked-function nil)
     381  (reserved1 nil)
     382  (reserved2 nil)
    378383  (reserved2 nil)
    379384  (reserved3 nil))
     
    512517            (io-buffer-buffer buf)) idx)))
    513518
     519(defun %private-ioblock-read-s8-byte (ioblock)
     520  (declare (optimize (speed 3) (safety 0)))
     521  (check-ioblock-owner ioblock)
     522  (%ioblock-read-s8-byte ioblock))
     523
     524(defun %locked-ioblock-read-s8-byte (ioblock)
     525  (declare (optimize (speed 3) (safety 0)))
     526  (with-ioblock-input-lock-grabbed (ioblock)
     527    (%ioblock-read-s8-byte ioblock)))
     528
     529
    514530(declaim (inline %ioblock-read-u16-byte))
    515531(defun %ioblock-read-u16-byte (ioblock)
     
    528544            (io-buffer-buffer buf)) idx)))
    529545
     546(defun %private-ioblock-read-u16-byte (ioblock)
     547  (declare (optimize (speed 3) (safety 0)))
     548  (check-ioblock-owner ioblock)
     549  (%ioblock-read-u16-byte ioblock))
     550
     551(defun %locked-ioblock-read-u16-byte (ioblock)
     552  (declare (optimize (speed 3) (safety 0)))
     553  (with-ioblock-input-lock-grabbed (ioblock)
     554    (%ioblock-read-u16-byte ioblock)))
     555
    530556(declaim (inline %ioblock-read-s16-byte))
    531557(defun %ioblock-read-s16-byte (ioblock)
     
    544570            (io-buffer-buffer buf)) idx)))
    545571
     572(defun %private-ioblock-read-s16-byte (ioblock)
     573  (declare (optimize (speed 3) (safety 0)))
     574  (check-ioblock-owner ioblock)
     575  (%ioblock-read-s16-byte ioblock))
     576
     577(defun %locked-ioblock-read-s16-byte (ioblock)
     578  (declare (optimize (speed 3) (safety 0)))
     579  (with-ioblock-input-lock-grabbed (ioblock)
     580    (%ioblock-read-s16-byte ioblock)))
     581
     582
    546583(declaim (inline %ioblock-read-u32-byte))
    547584(defun %ioblock-read-u32-byte (ioblock)
     
    560597            (io-buffer-buffer buf)) idx)))
    561598
    562 (defun %private-ioblock-read-u16-byte (ioblock)
     599(defun %private-ioblock-read-u32-byte (ioblock)
    563600  (check-ioblock-owner ioblock)
    564   (%ioblock-read-u16-byte ioblock))
    565 
    566 (defun %locked-ioblock-read-u16-byte (ioblock)
     601  (%ioblock-read-u32-byte ioblock))
     602
     603(defun %locked-ioblock-read-u32-byte (ioblock)
     604  (with-ioblock-input-lock-grabbed (ioblock)
     605    (%ioblock-read-u32-byte ioblock)))
     606
     607(declaim (inline %ioblock-read-s32-byte))
     608(defun %ioblock-read-s32-byte (ioblock)
     609  (declare (optimize (speed 3) (safety 0)))
     610  (let* ((buf (ioblock-inbuf ioblock))
     611         (idx (io-buffer-idx buf))
     612         (limit (io-buffer-count buf)))
     613    (declare (fixnum idx limit))
     614    (when (= idx limit)
     615      (unless (%ioblock-advance ioblock t)
     616        (return-from %ioblock-read-s32-byte :eof))
     617      (setq idx (io-buffer-idx buf)
     618            limit (io-buffer-count buf)))
     619    (setf (io-buffer-idx buf) (the fixnum (1+ idx)))
     620    (aref (the (simple-array (signed-byte 32) (*))
     621            (io-buffer-buffer buf)) idx)))
     622
     623(defun %private-ioblock-read-s32-byte (ioblock)
    567624  (check-ioblock-owner ioblock)
    568   (%ioblock-read-u16-byte ioblock))
    569 
     625  (%ioblock-read-s32-byte ioblock))
     626
     627(defun %locked-ioblock-read-s32-byte (ioblock)
     628  (with-ioblock-input-lock-grabbed (ioblock)
     629    (%ioblock-read-s32-byte ioblock)))
     630
     631#+64-bit-target
     632(progn
     633(declaim (inline %ioblock-read-u64-byte))
     634(defun %ioblock-read-u64-byte (ioblock)
     635  (declare (optimize (speed 3) (safety 0)))
     636  (let* ((buf (ioblock-inbuf ioblock))
     637         (idx (io-buffer-idx buf))
     638         (limit (io-buffer-count buf)))
     639    (declare (fixnum idx limit))
     640    (when (= idx limit)
     641      (unless (%ioblock-advance ioblock t)
     642        (return-from %ioblock-read-u64-byte :eof))
     643      (setq idx (io-buffer-idx buf)
     644            limit (io-buffer-count buf)))
     645    (setf (io-buffer-idx buf) (the fixnum (1+ idx)))
     646    (aref (the (simple-array (unsigned-byte 64) (*))
     647            (io-buffer-buffer buf)) idx)))
     648
     649(defun %private-ioblock-read-u64-byte (ioblock)
     650  (declare (optimize (speed 3) (safety 0)))
     651  (check-ioblock-owner ioblock)
     652  (%ioblock-read-u64-byte ioblock))
     653
     654(defun %locked-ioblock-read-u64-byte (ioblock)
     655  (declare (optimize (speed 3) (safety 0)))
     656  (with-ioblock-input-lock-grabbed (ioblock)
     657    (%ioblock-read-u64-byte ioblock)))
     658
     659(defun %ioblock-read-s64-byte (ioblock)
     660  (declare (optimize (speed 3) (safety 0)))
     661  (let* ((buf (ioblock-inbuf ioblock))
     662         (idx (io-buffer-idx buf))
     663         (limit (io-buffer-count buf)))
     664    (declare (fixnum idx limit))
     665    (when (= idx limit)
     666      (unless (%ioblock-advance ioblock t)
     667        (return-from %ioblock-read-s64-byte :eof))
     668      (setq idx (io-buffer-idx buf)
     669            limit (io-buffer-count buf)))
     670    (setf (io-buffer-idx buf) (the fixnum (1+ idx)))
     671    (aref (the (simple-array (signed-byte 64) (*))
     672            (io-buffer-buffer buf)) idx)))
     673
     674(defun %private-ioblock-read-s64-byte (ioblock)
     675  (declare (optimize (speed 3) (safety 0)))
     676  (check-ioblock-owner ioblock)
     677  (%ioblock-read-s64-byte ioblock))
     678
     679(defun %locked-ioblock-read-s64-byte (ioblock)
     680  (declare (optimize (speed 3) (safety 0)))
     681  (with-ioblock-input-lock-grabbed (ioblock)
     682    (%ioblock-read-s64-byte ioblock)))
     683)
    570684
    571685(declaim (inline %ioblock-read-swapped-u16-byte))
     
    611725  (declare (optimize (speed 3) (safety 0)))
    612726  (check-ioblock-owner ioblock)
    613   (let* ((buf (ioblock-inbuf ioblock))
    614          (idx (io-buffer-idx buf))
    615          (limit (io-buffer-count buf)))
    616     (declare (fixnum idx limit))
    617     (when (= idx limit)
    618       (unless (%ioblock-advance ioblock t)
    619         (return-from %private-ioblock-read-u8-byte :eof))
    620       (setq idx (io-buffer-idx buf)
    621             limit (io-buffer-count buf)))
    622     (setf (io-buffer-idx buf) (the fixnum (1+ idx)))
    623     (aref (the (simple-array (unsigned-byte 8) (*))
    624             (io-buffer-buffer buf)) idx)))
     727  (%ioblock-read-u8-byte ioblock))
    625728
    626729(defun %bivalent-locked-ioblock-read-u8-byte (ioblock)
     
    646749(defun %locked-ioblock-read-u8-byte (ioblock)
    647750  (declare (optimize (speed 3) (safety 0)))
    648   (with-ioblock-lock-grabbed ((locally (declare (optimize (speed 3) (safety 0)))
    649                                 (ioblock-inbuf-lock ioblock)))
    650     (let* ((buf (ioblock-inbuf ioblock))
    651            (idx (io-buffer-idx buf))
    652            (limit (io-buffer-count buf)))
    653       (declare (fixnum idx limit))
    654       (when (= idx limit)
    655         (unless (%ioblock-advance ioblock t)
    656           (return-from %locked-ioblock-read-u8-byte :eof))
    657         (setq idx (io-buffer-idx buf)
    658               limit (io-buffer-count buf)))
    659       (setf (io-buffer-idx buf) (the fixnum (1+ idx)))
    660       (aref (the (simple-array (unsigned-byte 8) (*))
    661               (io-buffer-buffer buf)) idx))))
     751  (with-ioblock-input-lock-grabbed (ioblock)
     752    (%ioblock-read-u8-byte ioblock)))
    662753
    663754(defun %general-ioblock-read-byte (ioblock)
     
    704795(defun %locked-ioblock-tyi (ioblock)
    705796  (declare (optimize (speed 3) (safety 0)))
    706   (with-ioblock-lock-grabbed ((locally (declare (optimize (speed 3) (safety 0)))
    707                                 (ioblock-inbuf-lock ioblock)))
     797  (with-ioblock-input-lock-grabbed (ioblock)
    708798    (%ioblock-tyi ioblock)))
    709799
     
    766856(defun %locked-ioblock-read-u16-encoded-char (ioblock)
    767857  (declare (optimize (speed 3) (safety 0)))
    768   (with-ioblock-input-locked (ioblock)
     858  (with-ioblock-input-lock-grabbed (ioblock)
    769859    (%ioblock-read-u16-encoded-char ioblock)))
    770860
     
    9731063    element))
    9741064
    975 (declaim (inline %ioblock-write-u16-element))
    976 (defun %ioblock-write-u16-element (ioblock element)
     1065(declaim (inline %ioblock-write-s8-element))
     1066(defun %ioblock-write-s8-element (ioblock element)
    9771067  (declare (optimize (speed 3) (safety 0)))
    9781068  (let* ((buf (ioblock-outbuf ioblock))
     
    9841074      (%ioblock-force-output ioblock nil)
    9851075      (setq idx 0 count 0))
    986     (setf (aref (the (simple-array (unsigned-byte 8) (*)) (io-buffer-buffer buf)) idx) element)
     1076    (setf (aref (the (simple-array (signed-byte 8) (*)) (io-buffer-buffer buf)) idx) element)
    9871077    (incf idx)
    9881078    (setf (io-buffer-idx buf) idx)
     
    9921082    element))
    9931083
     1084(declaim (inline %ioblock-write-u16-element))
     1085(defun %ioblock-write-u16-element (ioblock element)
     1086  (declare (optimize (speed 3) (safety 0)))
     1087  (let* ((buf (ioblock-outbuf ioblock))
     1088         (idx (io-buffer-idx buf))
     1089         (count (io-buffer-count buf))
     1090         (limit (io-buffer-limit buf)))
     1091    (declare (fixnum idx limit count))
     1092    (when (= idx limit)
     1093      (%ioblock-force-output ioblock nil)
     1094      (setq idx 0 count 0))
     1095    (setf (aref (the (simple-array (unsigned-byte 16) (*)) (io-buffer-buffer buf)) idx) element)
     1096    (incf idx)
     1097    (setf (io-buffer-idx buf) idx)
     1098    (when (> idx count)
     1099      (setf (io-buffer-count buf) idx))
     1100    (setf (ioblock-dirty ioblock) t)
     1101    element))
     1102
     1103(declaim (inline %ioblock-write-swapped-u16-element))
     1104(defun %ioblock-write-swapped-u16-element (ioblock element)
     1105  (declare (optimize (speed 3) (safety 0)))
     1106  (let* ((buf (ioblock-outbuf ioblock))
     1107         (idx (io-buffer-idx buf))
     1108         (count (io-buffer-count buf))
     1109         (limit (io-buffer-limit buf)))
     1110    (declare (fixnum idx limit count))
     1111    (when (= idx limit)
     1112      (%ioblock-force-output ioblock nil)
     1113      (setq idx 0 count 0))
     1114    (setf (aref (the (simple-array (unsigned-byte 16) (*))
     1115                  (io-buffer-buffer buf)) idx)
     1116          (logand #xffff (the fixnum (logior (the fixnum (ash element -8))
     1117                                             (the fixnum (ash element 8))))))
     1118    (incf idx)
     1119    (setf (io-buffer-idx buf) idx)
     1120    (when (> idx count)
     1121      (setf (io-buffer-count buf) idx))
     1122    (setf (ioblock-dirty ioblock) t)
     1123    element))
     1124
     1125(declaim (inline %ioblock-write-s16-element))
     1126(defun %ioblock-write-s16-element (ioblock element)
     1127  (declare (optimize (speed 3) (safety 0)))
     1128  (let* ((buf (ioblock-outbuf ioblock))
     1129         (idx (io-buffer-idx buf))
     1130         (count (io-buffer-count buf))
     1131         (limit (io-buffer-limit buf)))
     1132    (declare (fixnum idx limit count))
     1133    (when (= idx limit)
     1134      (%ioblock-force-output ioblock nil)
     1135      (setq idx 0 count 0))
     1136    (setf (aref (the (simple-array (signed-byte 16) (*)) (io-buffer-buffer buf)) idx) element)
     1137    (incf idx)
     1138    (setf (io-buffer-idx buf) idx)
     1139    (when (> idx count)
     1140      (setf (io-buffer-count buf) idx))
     1141    (setf (ioblock-dirty ioblock) t)
     1142    element))
     1143
     1144(declaim (inline %ioblock-write-u32-element))
     1145(defun %ioblock-write-u32-element (ioblock element)
     1146  (declare (optimize (speed 3) (safety 0)))
     1147  (let* ((buf (ioblock-outbuf ioblock))
     1148         (idx (io-buffer-idx buf))
     1149         (count (io-buffer-count buf))
     1150         (limit (io-buffer-limit buf)))
     1151    (declare (fixnum idx limit count))
     1152    (when (= idx limit)
     1153      (%ioblock-force-output ioblock nil)
     1154      (setq idx 0 count 0))
     1155    (setf (aref (the (simple-array (unsigned-byte 32) (*)) (io-buffer-buffer buf)) idx) element)
     1156    (incf idx)
     1157    (setf (io-buffer-idx buf) idx)
     1158    (when (> idx count)
     1159      (setf (io-buffer-count buf) idx))
     1160    (setf (ioblock-dirty ioblock) t)
     1161    element))
     1162
     1163(declaim (inline %ioblock-write-s32-element))
     1164(defun %ioblock-write-s32-element (ioblock element)
     1165  (declare (optimize (speed 3) (safety 0)))
     1166  (let* ((buf (ioblock-outbuf ioblock))
     1167         (idx (io-buffer-idx buf))
     1168         (count (io-buffer-count buf))
     1169         (limit (io-buffer-limit buf)))
     1170    (declare (fixnum idx limit count))
     1171    (when (= idx limit)
     1172      (%ioblock-force-output ioblock nil)
     1173      (setq idx 0 count 0))
     1174    (setf (aref (the (simple-array (signed-byte 32) (*)) (io-buffer-buffer buf)) idx) element)
     1175    (incf idx)
     1176    (setf (io-buffer-idx buf) idx)
     1177    (when (> idx count)
     1178      (setf (io-buffer-count buf) idx))
     1179    (setf (ioblock-dirty ioblock) t)
     1180    element))
     1181
     1182#+64-bit-target
     1183(progn
     1184(declaim (inline %ioblock-write-u64-element))
     1185(defun %ioblock-write-u64-element (ioblock element)
     1186  (declare (optimize (speed 3) (safety 0)))
     1187  (let* ((buf (ioblock-outbuf ioblock))
     1188         (idx (io-buffer-idx buf))
     1189         (count (io-buffer-count buf))
     1190         (limit (io-buffer-limit buf)))
     1191    (declare (fixnum idx limit count))
     1192    (when (= idx limit)
     1193      (%ioblock-force-output ioblock nil)
     1194      (setq idx 0 count 0))
     1195    (setf (aref (the (simple-array (unsigned-byte 64) (*)) (io-buffer-buffer buf)) idx) element)
     1196    (incf idx)
     1197    (setf (io-buffer-idx buf) idx)
     1198    (when (> idx count)
     1199      (setf (io-buffer-count buf) idx))
     1200    (setf (ioblock-dirty ioblock) t)
     1201    element))
     1202
     1203(declaim (inline %ioblock-write-s64-element))
     1204(defun %ioblock-write-s64-element (ioblock element)
     1205  (declare (optimize (speed 3) (safety 0)))
     1206  (let* ((buf (ioblock-outbuf ioblock))
     1207         (idx (io-buffer-idx buf))
     1208         (count (io-buffer-count buf))
     1209         (limit (io-buffer-limit buf)))
     1210    (declare (fixnum idx limit count))
     1211    (when (= idx limit)
     1212      (%ioblock-force-output ioblock nil)
     1213      (setq idx 0 count 0))
     1214    (setf (aref (the (simple-array (signed-byte 64) (*)) (io-buffer-buffer buf)) idx) element)
     1215    (incf idx)
     1216    (setf (io-buffer-idx buf) idx)
     1217    (when (> idx count)
     1218      (setf (io-buffer-count buf) idx))
     1219    (setf (ioblock-dirty ioblock) t)
     1220    element))
     1221)
    9941222
    9951223(declaim (inline %ioblock-write-char))
     
    10121240(defun %locked-ioblock-write-char (ioblock char)
    10131241  (declare (optimize (speed 3) (safety 0)))
    1014   (with-ioblock-input-locked (ioblock)
     1242  (with-ioblock-output-lock-grabbed (ioblock)
    10151243    (%ioblock-write-char ioblock char)))
    10161244
     
    10371265(defun %locked-ioblock-write-u8-encoded-char (ioblock char)
    10381266  (declare (optimize (speed 3) (safety 0)))
    1039   (with-ioblock-output-locked (ioblock)
     1267  (with-ioblock-output-lock-grabbed (ioblock)
    10401268    (%ioblock-write-u8-encoded-char ioblock char)))
    10411269
     
    10621290        (funcall encode-function char #'%ioblock-write-u8-element ioblock)))))
    10631291
     1292(declaim (inline %ioblock-write-u8-byte))
    10641293(defun %ioblock-write-u8-byte (ioblock byte)
    10651294  (declare (optimize (speed 3) (safety 0)))
    10661295  (if (= byte (logand #xff byte))
    10671296    (%ioblock-write-u8-element ioblock byte)
    1068     (error "Can't write ~s to stream ~s". (byte (ioblock-stream ioblock)))))
    1069 
    1070  
     1297    (error "~s doesn't match stream element-type of ~s". (byte (ioblock-stream ioblock)))))
     1298
     1299(defun %private-ioblock-write-u8-byte (ioblock byte)
     1300  (declare (optimize (speed 3) (safety 0)))
     1301  (check-ioblock-owner ioblock)
     1302  (%ioblock-write-u8-byte ioblock byte))
     1303
     1304(defun %locked-ioblock-write-u8-byte (ioblock byte)
     1305  (declare (optimize (speed 3) (safety 0)))
     1306  (with-ioblock-output-lock-grabbed (ioblock)
     1307    (%ioblock-write-u8-byte ioblock byte)))
     1308
     1309(declaim (inline %ioblock-write-s8-byte))
     1310(defun %ioblock-write-s8-byte (ioblock byte)
     1311  (declare (optimize (speed 3) (safety 0)))
     1312  (if (and (typep byte 'fixnum)
     1313           (>= (the fixnum byte) -128)
     1314           (< (the fixnum byte) 128))
     1315    (%ioblock-write-s8-element ioblock byte)
     1316    (error "~s doesn't match stream element-type of ~s". (byte (ioblock-stream ioblock)))))
     1317
     1318(defun %private-ioblock-write-s8-byte (ioblock byte)
     1319  (declare (optimize (speed 3) (safety 0)))
     1320  (check-ioblock-owner ioblock)
     1321  (%ioblock-write-s8-byte ioblock byte))
     1322
     1323(defun %locked-ioblock-write-s8-byte (ioblock byte)
     1324  (declare (optimize (speed 3) (safety 0)))
     1325  (with-ioblock-output-lock-grabbed (ioblock)
     1326    (%ioblock-write-s8-byte ioblock byte)))
     1327
     1328(declaim (inline %ioblock-write-u16-byte))
     1329(defun %ioblock-write-u16-byte (ioblock byte)
     1330  (declare (optimize (speed 3) (safety 0)))
     1331  (if (= byte (logand #xffff byte))
     1332    (%ioblock-write-u16-element ioblock byte)
     1333    (error "~s doesn't match stream element-type of ~s". (byte (ioblock-stream ioblock)))))
     1334
     1335(defun %private-ioblock-write-u16-byte (ioblock byte)
     1336  (declare (optimize (speed 3) (safety 0)))
     1337  (check-ioblock-owner ioblock)
     1338  (%ioblock-write-u16-byte ioblock byte))
     1339
     1340(defun %locked-ioblock-write-u16-byte (ioblock byte)
     1341  (declare (optimize (speed 3) (safety 0)))
     1342  (with-ioblock-output-lock-grabbed (ioblock)
     1343    (%ioblock-write-u16-byte ioblock byte)))
     1344
     1345(declaim (inline %ioblock-write-s16-byte))
     1346(defun %ioblock-write-s16-byte (ioblock byte)
     1347  (declare (optimize (speed 3) (safety 0)))
     1348  (if (and (typep byte 'fixnum)
     1349           (>= (the fixnum byte) -32768)
     1350           (< (the fixnum byte) 32768))
     1351    (%ioblock-write-s16-element ioblock byte)
     1352    (error "~s doesn't match stream element-type of ~s". (byte (ioblock-stream ioblock)))))
     1353
     1354(defun %private-ioblock-write-s16-byte (ioblock byte)
     1355  (declare (optimize (speed 3) (safety 0)))
     1356  (check-ioblock-owner ioblock)
     1357  (%ioblock-write-s16-byte ioblock byte))
     1358
     1359(defun %locked-ioblock-write-s16-byte (ioblock byte)
     1360  (declare (optimize (speed 3) (safety 0)))
     1361  (with-ioblock-output-lock-grabbed (ioblock)
     1362    (%ioblock-write-s16-byte ioblock byte)))
     1363
     1364
     1365
    10711366(defun %ioblock-clear-output (ioblock)
    10721367  (let* ((buf (ioblock-outbuf ioblock)))                     
     
    13251620                       (:lock '%locked-ioblock-read-u8-byte)
    13261621                       (t '%ioblock-read-u8-byte))))
     1622                  ((= subtag target::subtag-s8-vector)
     1623                     (case sharing
     1624                       (:private '%private-ioblock-read-s8-byte)
     1625                       (:lock '%locked-ioblock-read-s8-byte)
     1626                       (t '%ioblock-read-s8-byte)))
     1627                  ((= subtag target::subtag-u16-vector)
     1628                     (case sharing
     1629                       (:private '%private-ioblock-read-u16-byte)
     1630                       (:lock '%locked-ioblock-read-u16-byte)
     1631                       (t '%ioblock-read-u16-byte)))
     1632                  ((= subtag target::subtag-s16-vector)
     1633                     (case sharing
     1634                       (:private '%private-ioblock-read-s16-byte)
     1635                       (:lock '%locked-ioblock-read-s16-byte)
     1636                       (t '%ioblock-read-s16-byte)))
     1637                  ((= subtag target::subtag-u32-vector)
     1638                     (case sharing
     1639                       (:private '%private-ioblock-read-u32-byte)
     1640                       (:lock '%locked-ioblock-read-u32-byte)
     1641                       (t '%ioblock-read-u32-byte)))
     1642                  ((= subtag target::subtag-s32-vector)
     1643                     (case sharing
     1644                       (:private '%private-ioblock-read-s32-byte)
     1645                       (:lock '%locked-ioblock-read-s32-byte)
     1646                       (t '%ioblock-read-s32-byte)))
     1647                  #+64-bit-target
     1648                  ((= subtag target::subtag-u64-vector)
     1649                     (case sharing
     1650                       (:private '%private-ioblock-read-u64-byte)
     1651                       (:lock '%locked-ioblock-read-u64-byte)
     1652                       (t '%ioblock-read-u64-byte)))
     1653                  #+64-bit-target
     1654                  ((= subtag target::subtag-s64-vector)
     1655                     (case sharing
     1656                       (:private '%private-ioblock-read-s64-byte)
     1657                       (:lock '%locked-ioblock-read-s64-byte)
     1658                       (t '%ioblock-read-s64-byte)))
    13271659                  (t '%general-ioblock-read-byte))))))
    13281660
     
    13501682                (:private '%private-ioblock-write-char)
    13511683                (:lock '%locked-ioblock-write-char)
    1352                 (t '%ioblock-write-char)))))))
     1684                (t '%ioblock-write-char))))))
     1685  (unless (or (eq element-type 'character)
     1686              (subtypep element-type 'character))
     1687    (let* ((subtag (element-type-subtype element-type)))
     1688      (declare (type (unsigned-byte 8) subtag))
     1689      (setf (ioblock-write-byte-function ioblock)
     1690            (cond ((= subtag target::subtag-u8-vector)
     1691                   (if character-p
     1692                     ;; The bivalent case, at least for now
     1693                     (case sharing
     1694                       (:private '%bivalent-private-ioblock-write-u8-byte)
     1695                       (:lock '%bivalent-locked-ioblock-write-u8-byte)
     1696                       (t '%bivalent-ioblock-write-u8-byte))
     1697                     (case sharing
     1698                       (:private '%private-ioblock-write-u8-byte)
     1699                       (:lock '%locked-ioblock-write-u8-byte)
     1700                       (t '%ioblock-write-u8-byte))))
     1701                  ((= subtag target::subtag-s8-vector)
     1702                     (case sharing
     1703                       (:private '%private-ioblock-write-s8-byte)
     1704                       (:lock '%locked-ioblock-write-s8-byte)
     1705                       (t '%ioblock-write-s8-byte)))
     1706                  ((= subtag target::subtag-u16-vector)
     1707                     (case sharing
     1708                       (:private '%private-ioblock-write-u16-byte)
     1709                       (:lock '%locked-ioblock-write-u16-byte)
     1710                       (t '%ioblock-write-u16-byte)))
     1711                  ((= subtag target::subtag-s16-vector)
     1712                     (case sharing
     1713                       (:private '%private-ioblock-write-s16-byte)
     1714                       (:lock '%locked-ioblock-write-s16-byte)
     1715                       (t '%ioblock-write-s16-byte)))
     1716                  ((= subtag target::subtag-u32-vector)
     1717                     (case sharing
     1718                       (:private '%private-ioblock-write-u32-byte)
     1719                       (:lock '%locked-ioblock-write-u32-byte)
     1720                       (t '%ioblock-write-u32-byte)))
     1721                  ((= subtag target::subtag-s32-vector)
     1722                     (case sharing
     1723                       (:private '%private-ioblock-write-s32-byte)
     1724                       (:lock '%locked-ioblock-write-s32-byte)
     1725                       (t '%ioblock-write-s32-byte)))
     1726                  #+64-bit-target
     1727                  ((= subtag target::subtag-u64-vector)
     1728                     (case sharing
     1729                       (:private '%private-ioblock-write-u64-byte)
     1730                       (:lock '%locked-ioblock-write-u64-byte)
     1731                       (t '%ioblock-write-u64-byte)))
     1732                  #+64-bit-target
     1733                  ((= subtag target::subtag-s64-vector)
     1734                     (case sharing
     1735                       (:private '%private-ioblock-write-s64-byte)
     1736                       (:lock '%locked-ioblock-write-s64-byte)
     1737                       (t '%ioblock-write-s64-byte)))
     1738                  (t '%general-ioblock-write-byte))))))
    13531739
    13541740(defun buffer-element-type-for-character-encoding (encoding)
     
    27323118(defmethod stream-write-byte ((stream buffered-binary-output-stream-mixin)
    27333119                              byte)
    2734   (with-stream-ioblock-output (ioblock stream :speedy t)
    2735     (%ioblock-write-byte ioblock byte)))
     3120  (let* ((ioblock (stream-ioblock stream t)))
     3121    (funcall (ioblock-write-byte-function ioblock) ioblock byte)))
    27363122
    27373123(defmethod stream-write-byte ((stream basic-binary-output-stream) byte)
    27383124  (let* ((ioblock (basic-stream-ioblock stream)))
    2739     (with-ioblock-output-locked (ioblock)
    2740       (%ioblock-write-byte ioblock byte))))
     3125    (funcall (ioblock-write-byte-function ioblock) ioblock byte)))
    27413126
    27423127(defmethod stream-write-char ((stream buffered-character-output-stream-mixin) char)
     
    29133298      (declare (fixnum buftype written total limit))
    29143299      (if (not (= (the fixnum (typecode vector)) buftype))
    2915         (do* ((i start (1+ i)))
     3300        (do* ((i start (1+ i))
     3301              (wbf (ioblock-write-byte-function ioblock)))
    29163302             ((= i end))
    29173303          (let ((byte (uvref vector i)))
    29183304            (when (characterp byte)
    29193305              (setq byte (char-code byte)))
    2920             (%ioblock-write-byte ioblock byte)))
     3306            (funcall wbf ioblock byte)))
    29213307        (do* ((pos start (+ pos written))
    29223308              (left total (- left written)))
     
    29613347      (declare (fixnum buftype written total limit))
    29623348      (if (not (= (the fixnum (typecode vector)) buftype))
    2963         (do* ((i start (1+ i)))
     3349        (do* ((i start (1+ i))
     3350              (wbf (ioblock-write-byte-function ioblock)))
    29643351             ((= i end))
    29653352          (let ((byte (uvref vector i)))
    29663353            (when (characterp byte)
    29673354              (setq byte (char-code byte)))
    2968             (%ioblock-write-byte ioblock byte)))
     3355            (funcall wbf ioblock byte)))
    29693356        (do* ((pos start (+ pos written))
    29703357              (left total (- left written)))
Note: See TracChangeset for help on using the changeset viewer.