Merge remote-tracking branch 'simh/master'

This commit is contained in:
Mark Pizzolato 2014-12-30 18:51:47 -08:00
commit b611aa2fba
9 changed files with 45 additions and 15 deletions

View file

@ -393,7 +393,7 @@ while (reason == 0) {
}
if (sim_interval <= 0) { /* chk clock queue */
if (reason = sim_process_event ()) break;
if ((reason = sim_process_event ())) break;
intr_summ = pal_eval_intr (1); /* eval interrupts */
}
@ -1433,7 +1433,7 @@ while (reason == 0) {
case 0x39: /* MINSW4 */
if (!(arch_mask & AMASK_MVI)) ABORT (EXC_RSVI);
for (i = 0, res = 0; i < 8; i = i++) {
for (i = 0, res = 0; i < 8; i++) {
s1 = SEXT_W_Q (R[ra] >> (i << 4));
s2 = SEXT_W_Q (rbv >> (i << 4));
res = res | (((s1 <= s2)? R[ra]: rbv) & word_mask[i]);
@ -1451,7 +1451,7 @@ while (reason == 0) {
case 0x3B: /* MINUW4 */
if (!(arch_mask & AMASK_MVI)) ABORT (EXC_RSVI);
for (i = 0, res = 0; i < 8; i = i++) {
for (i = 0, res = 0; i < 8; i++) {
s64 = R[ra] & word_mask[i];
t64 = rbv & word_mask[i];
res = res | ((s64 <= t64)? s64: t64);
@ -1469,7 +1469,7 @@ while (reason == 0) {
case 0x3D: /* MAXUW4 */
if (!(arch_mask & AMASK_MVI)) ABORT (EXC_RSVI);
for (i = 0, res = 0; i < 8; i = i++) {
for (i = 0, res = 0; i < 8; i++) {
s64 = R[ra] & word_mask[i];
t64 = rbv & word_mask[i];
res = res | ((s64 >= t64)? s64: t64);
@ -1487,7 +1487,7 @@ while (reason == 0) {
case 0x3F: /* MAXSW4 */
if (!(arch_mask & AMASK_MVI)) ABORT (EXC_RSVI);
for (i = 0, res = 0; i < 8; i = i++) {
for (i = 0, res = 0; i < 8; i++) {
s1 = SEXT_W_Q (R[ra] >> (i << 4));
s2 = SEXT_W_Q (rbv >> (i << 4));
res = res | (((s1 >= s2)? R[ra]: rbv) & word_mask[i]);
@ -1834,7 +1834,7 @@ return SCPE_OK;
t_stat cpu_show_hist (FILE *st, UNIT *uptr, int32 val, void *desc)
{
uint32 k, di, lnt;
int32 k, di, lnt;
char *cptr = (char *) desc;
t_stat r;
InstHistory *h;

View file

@ -34,11 +34,7 @@
#include "sim_defs.h"
#include <setjmp.h>
#if defined (__GNUC__)
#define INLINE inline
#else
#define INLINE
#endif
/* Configuration */

View file

@ -133,7 +133,7 @@ if ((dtlb_spage & SPEN_43) && (VPN_GETSP43 (vpn) == 2))
return (va & SP43_MASK); /* 43b superpage? */
if ((dtlb_spage & SPEN_32) && (VPN_GETSP32 (vpn) == 0x1FFE))
return (va & SP32_MASK); /* 32b superpage? */
if (tlbp = dtlb_lookup (vpn)) /* try TLB */
if ((tlbp = dtlb_lookup (vpn))) /* try TLB */
return PHYS_ADDR (tlbp->pfn, va); /* found it */
if (ev5_mcsr & MCSR_NT) exc = cons_find_pte_nt (va, &pte64);
else exc = cons_find_pte_srm (va, &pte64);

View file

@ -904,7 +904,8 @@ t_stat parse_pal_hwre (char *cptr, t_value *inst)
{
uint32 i, d, val = 0;
int32 reg;
char *tptr, gbuf[CBUFSIZE];
const char *tptr;
char gbuf[CBUFSIZE];
t_stat r;
cptr = get_glyph (cptr, gbuf, '/');

View file

@ -209,7 +209,7 @@ t_uint64 vax_cvtif (t_uint64 val, uint32 ir, uint32 dp)
UFP a;
if (val == 0) return 0; /* 0? return +0 */
if (val < 0) { /* < 0? */
if ((val & Q_SIGN) != 0) { /* < 0? */
a.sign = 1; /* set sign */
val = NEG_Q (val); /* |val| */
}

View file

@ -716,7 +716,8 @@ t_uint64 bra, df, db;
uint32 i, k, lit8, fl;
int32 reg;
t_stat r;
char *tptr, gbuf[CBUFSIZE];
const char *tptr;
char gbuf[CBUFSIZE];
if ((r = parse_pal_hwre (cptr, inst)) < 0) return r; /* PAL hardware? */
cptr = get_glyph (cptr, gbuf, 0); /* get opcode */

View file

@ -246,7 +246,13 @@ typedef uint32 t_addr;
/* Stubs for inlining */
#define SIM_INLINE
#if defined(_MSC_VER)
#define SIM_INLINE _inline
#elif defined(__GNUC__)
#define SIM_INLINE inline
#else
#define SIM_INLINE
#endif
/* System independent definitions */

View file

@ -369,10 +369,35 @@ int sim_set_fsize (FILE *fptr, t_addr size)
{
return _chsize(_fileno(fptr), (long)size);
}
int sim_set_fifo_nonblock (FILE *fptr)
{
return -1;
}
#else /* !defined(_WIN32) */
#include <unistd.h>
int sim_set_fsize (FILE *fptr, t_addr size)
{
return ftruncate(fileno(fptr), (off_t)size);
}
#include <sys/stat.h>
#include <fcntl.h>
int sim_set_fifo_nonblock (FILE *fptr)
{
struct stat stbuf;
if (!fptr || fstat (fileno(fptr), &stbuf))
return -1;
#if defined(S_IFIFO) && defined(O_NONBLOCK)
if ((stbuf.st_mode & S_IFIFO)) {
int flags = fcntl(fileno(fptr), F_GETFL, 0);
return fcntl(fileno(fptr), F_SETFL, flags | O_NONBLOCK);
}
#endif
return -1;
}
#endif

View file

@ -54,6 +54,7 @@ FILE *sim_fopen (const char *file, const char *mode);
int sim_fseek (FILE *st, t_addr offset, int whence);
int sim_fseeko (FILE *st, t_offset offset, int whence);
int sim_set_fsize (FILE *fptr, t_addr size);
int sim_set_fifo_nonblock (FILE *fptr);
size_t sim_fread (void *bptr, size_t size, size_t count, FILE *fptr);
size_t sim_fwrite (void *bptr, size_t size, size_t count, FILE *fptr);
uint32 sim_fsize (FILE *fptr);