>> (defmspec $push (z)
>>    ;;alternative: (mset l (if (rulechk 'mlist) (simplifya (cons '(mlist) ll) t) (cons '(mlist simp) ll))))
>>    (mset l (simplifya (cons '(mlist) ll) t)))

> It's not necessary to invoke the simplifier here, right?

I think it's not necessary, but without the explicit call to simplifya, the simplifier insists on
simplifying every list member.  That's spendy. Surely just pushing a new list member shouldn't
render the other members to be unsimplified?  Well, unless you do something pretty weird such as:

(%i30) logsimp : false;
(%o30) false

(%i31) l : [exp(log(x))];
(%o31) [%e^log(x)]

(%i32) push(logsimp : true, l);
(%o32) [true,%e^log(x)]

(%i33) expand(%,0,0);
(%o33) [true,x]

See also https://www.ma.utexas.edu/pipermail/maxima/2009/018587.html . As far as I can tell,

(%i2) a[2] : []$
(%i3) a[3] : []$
(%i4) i : 1$
(%i5) push(x, a[i+1]);
(%o5) [x]
(%i6) [a[2],a[3],i];
(%o6) [[x],[],1]

works OK? See https://www.ma.utexas.edu/pipermail/maxima/2009/018604.html